Page 1 of 2

Programm steuern

Posted: 28 Apr 2019, 10:42
by muemmi
Hallo Zusammen

Ich bin auf der Suche nach einem Programm welches ich per Batch starten kann, welches mir dann ein Programm startet ein Passwort übergibt.. dann ein paar Tastenbefehle ausgibt um diverse Funktionen in diesem Programm zu starten

Kann ich AutoHotKey dafür missbrauchen?

LG

Frank

Re: Programm stuern

Posted: 28 Apr 2019, 13:01
by Kobaltauge
nicht nur missbrauchen. Dafür ist es gemacht. :)

Re: Programm stuern

Posted: 28 Apr 2019, 16:03
by Guest
Oh fein...

Ich gug mal ob ich was ähnliches finde

Sonst melde ich noch nochmal

LG

Re: Programm stuern

Posted: 29 Apr 2019, 08:39
by muemmi
Hmmm

Ich hab jetzt mal an Beispielen was zusammen gebastelt

So richtig läuft es nicht

run C:\PR_DE\PR.exe
#IfWinActive ahk_class WindowsForms10.Window.8.app.0.378734a
controlsend, WindowsForms10.EDIT.app.0.378734a1 ,12345

Wenn ich das script doppelklicke startet tatsächlich das Programm!

Das Programm ruft dann ein Loginfenster auf und landet auf dem Passwort feld

In Zeile 2 soll es das Fenster identifizieren (keine Ahnung ob ich das nun brauche)

In Zeile drei sollte er der Wert 12345 in das Feld schreiben

Passiert natürlich nicht

LG
Frank

Re: Programm stuern

Posted: 29 Apr 2019, 12:52
by gregster
Probiers mal so:

Code: Select all

run C:\PR_DE\PR.exe
WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a
ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,12345, A
(ggf. - wenn das Programm mit erweiterten Rechten läuft - musst du das Skript 'als Administrator ausführen')

Re: Programm steuern

Posted: 29 Apr 2019, 13:34
by muemmi
nöööö

Aber vor ich Schimpfe bekomme.

"Code: Select all" gehört nicht dazu... oder ?

Oder kann das ein Zeit Problem sein ? Es dauert recht lange bis der Focus auf dem Eingabefeld fürs Passwort landet

Aber es bleibt leer der Wert "12345" kommt nicht an!

was bedeuted das "A" ? am Ende

LG

Re: Programm steuern

Posted: 29 Apr 2019, 14:34
by gregster
muemmi wrote:
29 Apr 2019, 13:34
"Code: Select all" gehört nicht dazu... oder ?
Nee, das gehört zu der feschen Codebox (die du durch [code][/code]-Tags um den Code herum benutzen kannst; das wäre übrigens auch dir für zukünftige Posts zu empfehlen) und macht genau das, was draufsteht: Wenn du "Select All" klickst, wird der Code in der Codebox ausgewählt/markiert (zum Kopieren).

ControlSend kann schon mal tricky sein und funktioniert auch nicht zwangsläufig mit jedem Programm.
was bedeuted das "A" ? am Ende
Der dritte Parameter von ControlSend ist WinTitle: A steht für das aktive Fenster (angenommen, das Programmfenster ist wirklich (noch) aktiv zu dem Zeitpunkt). ahk_class WindowsForms10.Window.8.app.0.378734a ist hier vielleicht besser.

Oder kann das ein Zeit Problem sein ? Es dauert recht lange bis der Focus auf dem Eingabefeld fürs Passwort landet
WinWaitActive wartet eigentlich bis das entsprechende Fenster aktiv ist - vielleicht aber ist das Eingabefeld dann noch nicht bereit...🤷‍♂️
denn Fokus sollte eigentlich nicht notwendig sein, da du direkt an das Kontrollelement sendest (falls der Name stimmt und das Programm mit ControlSend zusammenarbeitet). Du könntest natürlich zu Testzwecken nen Sleep 2000 (2000 ms = 2 Sekunden) o. ä. dazwischenstellen.

Oder probier mal

Code: Select all

run C:\PR_DE\PR.exe
WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a		; alternativ WinWait
msgbox
return

Space::ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,12345, ahk_class WindowsForms10.Window.8.app.0.378734a

Esc::ExitApp	; drücke Escape-Taste zum Beenden
Schau, ob die msgbox erscheint... wenn ja, bestätige mit 'OK' (wenn nicht, checke die ahk_class nochmals). Drücke dann die Leertaste ('Space') um zu senden... funktioniert das? Probier auch mal Space::ControlSend, ,12345, ahk_class WindowsForms10.Window.8.app.0.378734a

Wenn nicht, funktioniert es, wenn du das Passwortfeld per Hand auswählst und dann Space drückst, mit
Space::Send, 12345 ?

Re: Programm steuern

Posted: 30 Apr 2019, 04:38
by muemmi
Also:

Die Message Box kam.. wartete aber nicht auf irgendwas! Sprich die kam auch schon vor dem Login-Fenster!

Ich hab mir mit dem Sleep geholfen!

Das ControlSend schreibt auch schön seine Wert rein !

Ich such jetzt mal nach betätigen des "Login" Buttons


run C:\ELS_V55R6_DE\ELS5.exe

WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a ; geht aber nicht

Sleep 8000

ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,12345, ahk_class WindowsForms10.Window.8.app.0.378734a

Esc::ExitApp ; drücke Escape-Taste zum Beenden Lass ich mal zum basteln drin

Re: Programm steuern

Posted: 30 Apr 2019, 11:30
by gregster
Hmm, merkwürdig, aber wenn es ein eigenes Login-Fenster gibt, dann hat es wahrscheinlich eine andere ahk_class als das Hauptfenster des Programms (und du schaust bisher wahrscheinlich nach letzterem mit Winwait...?). Du müsstest dein Skript dann auf dieses Login-Fenster warten lassen, statt auf das Hauptfenster.

Welche Informationen gibt WindowSpy.ahk über den Login-Button?
Neben ControlClick könntest du ja auch ein {Enter} mit ControlSend schicken...

Re: Programm steuern

Posted: 30 Apr 2019, 14:00
by muemmi
Welche Informationen gibt WindowSpy.ahk über den Login-Button?
Was meinst du ? .. das .ahk versteh ich jetzt nicht!

Wenn ich auf den LOGIN Butto drücke hab ich natürlich diverse andere Infos

Mir ist es aber noch nicht gelungen Hier ein Bild rein zu bekommen... wie geht das ?

Aktueller Script!
run C:\ELS_V55R6_DE\ELS5.exe

WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a ; ahk_class des Login Fensters

Sleep 8000

ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,12345, ahk_class WindowsForms10.Window.8.app.0.378734a ; das tut es

Sleep 1000

ControlClick, &Login, WindowsForms10.BUTTON.app.0.378734a2 ; Das ist die ClassNN des Buttons


Esc::ExitApp ; drücke Escape-Taste zum Beenden Lass ich mal zum basteln drin

Re: Programm steuern

Posted: 30 Apr 2019, 14:58
by garry
hier ein primitives program für Internet login in gmx email
warte bis url richtig aufgebaut ist und denn mit LeftButton ins erste Eingabefeld klicken

Code: Select all

#warn
setworkingdir,%a_scriptdir%
Settitlematchmode,2
SetKeyDelay,20,20

[email protected]         ;-- Username
BB=1234567890abcd                              ;-- Password 
cc=https://www.gmx.ch/                         ;-- URL to start
dd:="GMX:"                                     ;-- wait for this in title

Run,%cc%,,max
WinWait,%dd%
IfWinNotActive ,%dd%,,WinActivate,%dd%
  WinWaitActive,%dd%

;- hier klicken wenn alles aufgebaut ist
KeyWait, LButton, D       
SetKeyDelay,40,40
sleep,1500
send,%aa%
sleep,900
send,{TAB}
send,%BB%
sleep,500
send,{TAB}
sleep,500
send,{ENTER}
ExitApp
esc::exitapp

Re: Programm steuern

Posted: 30 Apr 2019, 16:05
by muemmi
hmmmm

sicher das das Post jetzt passt ?

LG

Re: Programm steuern

Posted: 01 May 2019, 00:12
by gregster
muemmi wrote:
30 Apr 2019, 14:00
Welche Informationen gibt WindowSpy.ahk über den Login-Button?
Was meinst du ? .. das .ahk versteh ich jetzt nicht!
Window Spy = WindowSpy.ahk - das Hilfsprogramm kennst du ja offenbar; man kann es bspw. über das Kontextmenü eines Skript-Icons starten, aber eigentlich ist es auch nur ein AutoHotkey-Skript, das sich im AHK-Installationsverzeichnis befindet.

muemmi wrote:
30 Apr 2019, 14:00
Mir ist es aber noch nicht gelungen Hier ein Bild rein zu bekommen... wie geht das ?
Im "Full Editor & Preview"-Modus unter das Editierfeld scrollen, dann "Attachments" klicken > "Add files" > ggf. kurz warten, bis das Bild hochgeladen ist; schließlich mit "Place inline" entsprechende Tags in das Editierfeld einfügen lassen - dann zur Kontrolle Vorschau/Preview angucken (und Tags ggf. dahin verschieben, wo man sie eigentlich hinhaben wollte ;) ). Ich meine, früher hätte auch teilweise Drag+drop funktioniert (wie auch der Text in untenstehender Grafik andeutet), aber geht derzeit bei mir nicht (mehr) 🤷‍♂️.

upload.png
upload.png (65.83 KiB) Viewed 1033 times

Übrigens, für die schönere Darstellung von Code gibt es die [code][/code]-Tags. Zur Zeit missbrauchst du die [quote][/quote]-Tags für deinen Code. Für die Code-Tags gibt es auch einen Button im erweiterten Editor (rechts neben den Quote-Tags); dann braucht man nicht selber tippen.

muemmi wrote:
30 Apr 2019, 14:00
ControlClick, &Login, WindowsForms10.BUTTON.app.0.378734a2 ; Das ist die ClassNN des Buttons
Guck dir nochmal die Syntax von ControlClick an - ich meine, da passt was nicht mit deiner Zeile: Der zweite Paramter soll Wintitle sein, nicht die ClassNN des Kontrollelements (letztere wäre alternativ zum Text des Kontrollelements im ersten Parameter nutzbar).

Also eher

Code: Select all

ControlClick, &Login, ahk_class WindowsForms10.Window.8.app.0.378734a	
; oder
ControlClick, WindowsForms10.BUTTON.app.0.378734a2, ahk_class WindowsForms10.Window.8.app.0.378734a	
(das ist jetzt ne Codebox ⬆)

Re: Programm steuern

Posted: 01 May 2019, 04:06
by muemmi
Genial.. es tut es.... so es wird jetzt spannend!

Ich muss jetzt auf Reiter und Unterpunkte Klicken

Ich versuch es mal

Re: Programm steuern

Posted: 01 May 2019, 04:48
by muemmi
So jetzt mal ein Bild

Normalerweise würde ich jetzt mit der Maus oben auf "ELS-Line" gehen (MausKlick) und dann im Unterpunkt auf "Starten" (MausKlick)

Alternativ geht es auch mit ALT und 7 mal TAB und zweimal ENTER

Also hab ich es mal mit Controlsend versucht!

Klappt aber nicht!

Die möglichkeit mit dem ansteuern der Reiter erschließt sich mir ber jetzt noch nicht

Code: Select all

run C:\ELS_V55R6_DE\ELS5.exe

WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a		; ahk_class des Login Fensters 
Sleep 8000
ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,12345, ahk_class WindowsForms10.Window.8.app.0.378734a ; das tut es 
Sleep 1000
ControlClick, &Login, ahk_class WindowsForms10.Window.8.app.0.378734a	
Sleep 1000

ControlSend, WindowsForms10.SysListView32.app.0.378734a1 ,{Alt}, ahk_class WindowsForms10.Window.8.app.0.378734a 
Sleep 1000
ControlSend, WindowsForms10.SysListView32.app.0.378734a1 ,{Tab}, ahk_class WindowsForms10.Window.8.app.0.378734a
Sleep 1000
ControlSend, WindowsForms10.SysListView32.app.0.378734a1 ,{Tab}, ahk_class WindowsForms10.Window.8.app.0.378734a
Sleep 1000







Hier mal wie das aussieht mit "Spy" mit aktiven Fenster:
FO1.PNG
FO1.PNG (91.91 KiB) Viewed 1002 times

Re: Programm steuern

Posted: 01 May 2019, 05:57
by just me
Moin,

ELS-Line ist anscheinend ein Eintrag im Fenstermenü. Mit etwas Glück kannst Du die Submenüeinträge wie Starten direkt mit WinMenuSelectItem ansteuern. Wenn Du in den Menüeinträgen unterstrichene Buchstaben oder das Zeichen &siehst, solltest Du auch versuchen, den Zeichen ein & voranstellen.

Re: Programm steuern

Posted: 01 May 2019, 13:04
by muemmi
Hmmm laut Doku hört sich das prima an

hab das mal so probiert:

Code: Select all

run C:\ELS_V55R6_DE\ELS5.exe

WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a		; ahk_class des Login Fensters 
Sleep 8000
ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,12345, ahk_class WindowsForms10.Window.8.app.0.378734a ; das tut es 
Sleep 1000
ControlClick, &Login, ahk_class WindowsForms10.Window.8.app.0.378734a	

Sleep 2000

WinMenuSelectItem, ELS5 - ODBC - AKZO [DOM] , , 8& ,1&

Passiert rein Gar nichts

LG

Re: Programm steuern

Posted: 02 May 2019, 02:19
by just me
Moin,

Dein Code sieht eigentlich gut aus, wenn das Fenster innerhalb von 2 Sekunden nach dem Login aktiv ist. Es würde den achten Eintrag in der Menüleiste (8& = "ELS-Line") und darin den ersten Eintrag (1&) auswählen. Das klappt leider nicht immer. Der folgende Code soll prüfen, ob AHK mit Deinen Fensterkriterien an das Fenstermenü herankommt. Lass es mal laufen und berichte, was die MsgBoxen sagen.

Code: Select all

#NoEnv
Run C:\ELS_V55R6_DE\ELS5.exe

WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a		; ahk_class des Login Fensters
Sleep 8000
ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,12345, ahk_class WindowsForms10.Window.8.app.0.378734a ; das tut es
Sleep 1000
ControlClick, &Login, ahk_class WindowsForms10.Window.8.app.0.378734a

; Sleep 2000
; WinMenuSelectItem, ELS5 - ODBC - AKZO [DOM] , , 8& ,1&

WinWaitActive, ELS5 - ODBC - AKZO [DOM], , 2 ; Max. 2 Sekunden auf das Fenster warten.
If (ErrorLevel) ; Timeout
{
   MsgBox, 16, Fehler!, Das ELS5 Fenster wurde nicht geöffnet!
}
Else
{
   HWND := WinExist() ; WinWaitActive hat das 'Zuletzt Gefundene Fenster' gesetzt.
   HMENU := DllCall("GetMenu", "Ptr", HWND,"UPtr")
   If (HMENU = 0)
      MsgBox, 16, Fehler!, Auf das Fenstermenü kann nicht zugegriffen werden!
   Else
      MsgBox, 0, OK!, Das Fenstermenü wurde erkannt: %HMENU%.
}
ExitApp
*Ich konnte das nicht testen*

Re: Programm steuern

Posted: 02 May 2019, 09:05
by muemmi
Es Kommt

Das ELS5 Fenster wurde nicht geöffnet!

Re: Programm steuern

Posted: 02 May 2019, 10:01
by just me
Dann ist entweder der Fenstertitel ELS5 - ODBC - AKZO [DOM] falsch oder dioie Wartezeit ist zu kurz. Wenn das Fenster sichtbar und aktiv wird, bevor die MsgBox erscheint, ist es wahrscheinlich der Titel. Du kannst aber trotzdem mal mit

Code: Select all

WinWaitActive, ELS5 - ODBC - AKZO [DOM], , 10 ; Max. 10 Sekunden auf das Fenster warten.
versuchen und schauen, ob das mehr Erfolg hat.