Drucker ansteuern über GUI

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Drucker ansteuern über GUI

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 04:54

Kein Problem, gern geschehen. Aber schade, dass das nicht funktioniert hat.
Vielleicht finde ich noch mehr raus über den headless-Modus. Ich werde auf jeden Fall noch etwas testen am Wochenende.

Edit: Vielleicht kann man das verbundene Skript auch ohne gerenderten Button starten. :think: In einer ruhigen Stunde...

Re: Drucker ansteuern über GUI

Post by Optimus Prime » 15 May 2020, 04:52

Also ich danke dir an dieser Stelle schon einmal für deine Mühe. Um das Thema jetzt nicht unnötig weiter aufzublasen, werde ich das funktionierende Visible-Skript in das GUI einbauen.
Das hilft auf jeden Fall schonmal enorm weiter. Vielen vielen Dank und ein schönes We wünsche ich dir.

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 04:42

gregster wrote:
15 May 2020, 04:40
Dann wird die Seite wahrscheinlich nicht richtig geladen im headless-Modus.
Aber eigentlich komisch - in dem Fall hätte ich eigentlich eine Fehlermeldung erwartet (über ein unbekanntes Seitenelement).

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 04:40

Hm, das ist natürlich blöd. Dann wird die Seite wahrscheinlich nicht richtig geladen im headless-Modus.
Pfff... dann kommen wir hier vielleicht nicht weiter, zumindest nicht headless. :cry:

LuckyJoe's Vorschlag wäre ja vielleicht alternativ gangbar. Könnt man ja auch über AHK steuern, falls da das richtige dabei sein sollte.
LuckyJoe wrote:
14 May 2020, 02:19
ist zwar kein AHK, aber vielleicht hilft dir die Ansteuerung per Batch? Link

Re: Drucker ansteuern über GUI

Post by Optimus Prime » 15 May 2020, 04:31

Alles gut. Den Button habe ich korrigiert. Leider wird nun der Befehl nicht ausgeführt.

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 04:26

Da war ein copy/paste-Fehler im Code, sorry.

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 04:19

Dann probier doch mal bitte das hier.
(WinWait ist nun raus, da kein sichtbares Window existiert; ein zusätzlicher headless-Parameter 👻; ein abschließender Kill()-Befehl, um die Chrome-Instanz nach getaner Arbeit zu schließen).

Code: Select all

#NoEnv
SetBatchLines, -1
#Include Chrome.ahk											

url := "http://192.168.120.176"							

; --- Create a new Chrome instance ---
FileCreateDir, ChromeProfile										; creates a profile subdirectory in current folder
ChromeInst := new Chrome("ChromeProfile", , "--headless")

; --- Connect to the page ---
if !(Page := ChromeInst.GetPage( ) )		
{
	MsgBox, Could not retrieve page!
	ChromeInst.Kill()
}
else
	Page.WaitForLoad()

Page.Call("Page.navigate", {"url": url})			; Navigate to url
Page.WaitForLoad()

Page.Evaluate("document.getElementById('ui_btn_2_1').click()")
sleep 5000
ChromeInst.Kill()
return

Esc::ExitApp
Das sleep 5000 sollte hoffentlich lang genug sein (vermutlich ginge es kürzer), bevor die Chrome-Instanz nach dem Klick geschlossen wird (eine einzige Instanz öffnet immer eine ganze Menge von Prozessen - am besten checkst du mal im Taskmanager, ob die alle zugehen; hier scheint's zu klappen). Jetzt kannst du es natürlich, nach Belieben, in einen Hotkey umwandeln oder mit einem Button verknüpfen.

Viel Erfahrung mit dem headless-Modus von Chrome hab ich nicht... wenn Tempo wichtig wäre, wäre zu überlegen, ob man nicht zum Skriptstart eine Chrome-Instanz im Hintergrund startet und diese immer wiederverwendet, anstatt sie zu schließen und immer wieder neu zu erstellen. :think: (natürlich hat man dann die ganze Zeit diese Prozesse am laufen, allerdings ohne Chrome-GUI). Aber keine Ahnung, wie stabil das wäre. Das müsste man mal richtig testen.

Was den Internet Explorer angeht, bin ich allerdings ratlos (in Chrome.ahk werkelt eigentlich auch ein ActiveX-IE-Element als Hilfsmittel - das scheint dann wohl zu funktionieren, aber das hat wahrscheinlich andere Einstellungen als der normale COM-IE)

Edit: Ups, hatte ne falsche Button-ID im Code - nun behoben.

Re: Drucker ansteuern über GUI

Post by Optimus Prime » 15 May 2020, 03:55

gregster wrote:
15 May 2020, 03:51
Optimus Prime wrote:
15 May 2020, 03:40
Jetzt wird die IP über Chrome geöffnet. Fehlt noch die Ansteuerung und not visible wäre ein Traum :)
Ah gut, dann probier erstmal

Code: Select all

Page.Evaluate("document.getElementById('ui_btn_2_1').click()")
einzufügen, unter Page.WaitForLoad().
Das funktioniert und ich bin echt begeistert. Wenn das jetzt noch im Hintergund läuft wäre es super :D

Aktueller Stand:

Code: Select all

#NoEnv
SetBatchLines, -1
SetTitleMatchMode 2
#Include Chrome.ahk											; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=42890

url := "http://192.168.120.176"							; füge deine IP ein

; --- Create a new Chrome instance ---
FileCreateDir, ChromeProfile										; creates a profile subdirectory in current folder
ChromeInst := new Chrome("ChromeProfile")
winwait, - Google Chrome	

; --- Connect to the page ---
if !(Page := ChromeInst.GetPage( , ,  "fnCallback" ))		; connect to callback function 
{
	MsgBox, Could not retrieve page!
	ChromeInst.Kill()
}
else
	Page.WaitForLoad()

Page.Call("Page.navigate", {"url": url})			; Navigate to url
Page.WaitForLoad()
Page.Evaluate("document.getElementById('ui_btn_2_1').click()")

return

Esc::ExitApp

Re: Drucker ansteuern über GUI

Post by Optimus Prime » 15 May 2020, 03:52

gregster wrote:
15 May 2020, 03:42
Ist nur ein Versuch, aber du könntest im IE-Code oben auch mal

Code: Select all

ie := ComObjCreate("{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") ; create a InternetExplorerMedium instance
veruschen, statt
ie := ComObjCreate("InternetExplorer.Application")
Geht auch nicht...

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 03:51

Optimus Prime wrote:
15 May 2020, 03:40
Jetzt wird die IP über Chrome geöffnet. Fehlt noch die Ansteuerung und not visible wäre ein Traum :)
Ah gut, dann probier erstmal

Code: Select all

Page.Evaluate("document.getElementById('ui_btn_2_1').click()")
einzufügen, unter Page.WaitForLoad().

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 03:42

Ist nur ein Versuch, aber du könntest im IE-Code oben auch mal

Code: Select all

ie := ComObjCreate("{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") ; create a InternetExplorerMedium instance
veruschen, statt
ie := ComObjCreate("InternetExplorer.Application")

Re: Drucker ansteuern über GUI

Post by Optimus Prime » 15 May 2020, 03:40

Jetzt wird die IP über Chrome geöffnet. Fehlt noch die Ansteuerung und not visible wäre ein Traum :)

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 03:16

Ist allerdings etwas aufwendiger... COM IE ist eben schon in Windows eingebaut.

Schauen wir erst mal, ob die Seite lädt - um den Button kümmern wir uns dann später. Vergiss nicht, deine IP einzufügen.

Code: Select all

#NoEnv
SetBatchLines, -1
SetTitleMatchMode 2
#Include Chrome.ahk											; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=42890

url := "http://192.192.192.1"							; füge deine IP ein

; --- Create a new Chrome instance ---
FileCreateDir, ChromeProfile										; creates a profile subdirectory in current folder
ChromeInst := new Chrome("ChromeProfile")
winwait, - Google Chrome	

; --- Connect to the page ---
if !(Page := ChromeInst.GetPage( , ,  "fnCallback" ))		; connect to callback function 
{
	MsgBox, Could not retrieve page!
	ChromeInst.Kill()
}
else
	Page.WaitForLoad()

Page.Call("Page.navigate", {"url": url})			; Navigate to url
Page.WaitForLoad()

return

Esc::ExitApp
Damit das funktioniert, lade bitte Chrome.ahk v1.2 von github herunter, kopiere Chrome.ahk in das Verzeichnis des Skripts oben (oder passe den Pfad in #include ggf. an) und korrigiere in Chrome.ahk bitte noch den Typo in der Zeile

Code: Select all

RegRead, ChromePath, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Pahs\chrome.exe
zu

Code: Select all

RegRead, ChromePath, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe
(es fehlt ein t in App Paths)

Das Ganze können wir dann ggf. auch "headless"/"not visible" machen (müsste deutlich schneller sein).

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 03:00

Optimus Prime wrote:
15 May 2020, 02:39
Die Frage mit dem WWW kann ich nicht deuten!
Das bezog sich auf deine voreingestellte Startseite (aber die wird ja nicht durch COM geladen :think: ).
Geht das Vorhaben auch mit Mozilla oder Chrome? Lohnt sich ein Test?
Yo, wir können es mal mit Chrome und Chrome.ahk versuchen. Moment, ich änder mal den Code.

Re: Drucker ansteuern über GUI

Post by Optimus Prime » 15 May 2020, 02:39

Nein noch nie. Die Frage mit dem WWW kann ich nicht deuten! Geht das Vorhaben auch mit Mozilla oder Chrome? Lohnt sich ein Test?

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 02:33

Merkwürdig. Ist es eine Seite im WWW ?
Wie gesagt, hängt vielleicht mit den Berechtigungen für IE COM zusammen. Kennt sich jemand damit aus?

Also IE COM hast du bislang noch nicht verwendet, oder?

Re: Drucker ansteuern über GUI

Post by Optimus Prime » 15 May 2020, 02:17

Moin Gregster,
also das S hat keinen Einfluss. In beiden Fällen wird nur die IE mit der vor eingestellten Startseite gestartet.
Die händische Eingabe der IP funktioniert.

Re: Drucker ansteuern über GUI

Post by gregster » 15 May 2020, 01:55

Probier mal http:// statt https://.
Wenn ich es mit der internen IP meines Routers versuche, dann funktioniert auch nur http://.

Wenn's das nicht sein sollte, check doch mal bitte, ob der Internet Explorer grundsätzlich Probleme mit deiner Druckerseite hat... also tipp sie bitte mal händisch ein.

Aber du sagst, ie.Navigate("https://www.google.com/") geht auch nicht? Das ist verdächtig. Was passiert dann? Hast du auf deinem PC überhaupt schon mal erfolgreich IE COM verwendet?
Ggf. müssen wir was in den Windows-IE-Einstellungen umstellen...

Re: Drucker ansteuern über GUI

Post by Optimus Prime » 15 May 2020, 00:54

Vielen Dank für die Info. Beim Test von Gregsters Skript lädt zwar die IE, die Ansteuerung der IP geht aber nicht. Ich habe es mal mit der Googlewebsite probiert und zusätzliche Pausen eingebaut, jedoch ohne Erfolg.

Code: Select all

F2::		; F2 drücken
ie := ComObjCreate("InternetExplorer.Application") 
ie.visible := true 
sleep 5000
ie.Navigate("https://192.168.120.176")

; wait for the browser to load
while (ie.ReadyState != 4 or ie.Document.ReadyState != "complete" or ie.busy)
{
	sleep 100
}

ie.document.getElementById("ui_btn_2_1").click()
sleep 500
ie.quit()
return
Gregster weißt du Rat? Genau diese Ansteuerung habe ich gesucht :)

Re: Drucker ansteuern über GUI

Post by LuckyJoe » 14 May 2020, 02:19

Hi,

ist zwar kein AHK, aber vielleicht hilft dir die Ansteuerung per Batch? Link

Top