Programm steuern Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

muemmi

Programm steuern

28 Apr 2019, 10:42

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
Kobaltauge
Posts: 264
Joined: 09 Mar 2019, 01:52
Location: Germany
Contact:

Re: Programm stuern

28 Apr 2019, 13:01

nicht nur missbrauchen. Dafür ist es gemacht. :)
Guest

Re: Programm stuern

28 Apr 2019, 16:03

Oh fein...

Ich gug mal ob ich was ähnliches finde

Sonst melde ich noch nochmal

LG
muemmi

Re: Programm stuern

29 Apr 2019, 08:39

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
gregster
Posts: 8916
Joined: 30 Sep 2013, 06:48

Re: Programm stuern

29 Apr 2019, 12:52

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')
muemmi

Re: Programm steuern

29 Apr 2019, 13:34

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
gregster
Posts: 8916
Joined: 30 Sep 2013, 06:48

Re: Programm steuern

29 Apr 2019, 14:34

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 ?
muemmi

Re: Programm steuern

30 Apr 2019, 04:38

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
gregster
Posts: 8916
Joined: 30 Sep 2013, 06:48

Re: Programm steuern

30 Apr 2019, 11:30

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...
muemmi
Posts: 17
Joined: 30 Apr 2019, 04:59

Re: Programm steuern

30 Apr 2019, 14:00

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
garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: Programm steuern

30 Apr 2019, 14:58

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
muemmi
Posts: 17
Joined: 30 Apr 2019, 04:59

Re: Programm steuern

30 Apr 2019, 16:05

hmmmm

sicher das das Post jetzt passt ?

LG
gregster
Posts: 8916
Joined: 30 Sep 2013, 06:48

Re: Programm steuern

01 May 2019, 00:12

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 3364 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 ⬆)
muemmi
Posts: 17
Joined: 30 Apr 2019, 04:59

Re: Programm steuern

01 May 2019, 04:06

Genial.. es tut es.... so es wird jetzt spannend!

Ich muss jetzt auf Reiter und Unterpunkte Klicken

Ich versuch es mal
muemmi
Posts: 17
Joined: 30 Apr 2019, 04:59

Re: Programm steuern

01 May 2019, 04:48

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 3333 times
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Programm steuern

01 May 2019, 05:57

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.
muemmi
Posts: 17
Joined: 30 Apr 2019, 04:59

Re: Programm steuern

01 May 2019, 13:04

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
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Programm steuern

02 May 2019, 02:19

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*
muemmi
Posts: 17
Joined: 30 Apr 2019, 04:59

Re: Programm steuern

02 May 2019, 09:05

Es Kommt

Das ELS5 Fenster wurde nicht geöffnet!
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Programm steuern

02 May 2019, 10:01

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.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: gero, Rohwedder and 33 guests