Sleep-Befehle ersetzen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

WPLPHSS
Posts: 162
Joined: 04 Feb 2017, 05:34

Sleep-Befehle ersetzen

26 Jul 2019, 07:43

Ich habe folgendes Problem nach Zulegung eines neuen Notebooks mit dem neuesten M-Prozessor (Intel® Core™ i5-8250U Prozessor Quad-Core 1,60 GHz ). Ist das Notebook nicht an der Steckdose, arbeitet er energiesparsam, so dass sich die Leistung verlangsamt und Makros nicht richtig ausgeführt werden.

Gibt es eine Möglichkeit, dass die Send-Befehle nach der Ausführung des vorherigen Send-Befehls auch ohne die Sleepbefehl relativ zügig im Bateriebetrieb ausgeführt werden?

Beispiel aus einem Makro mit einer langen Sleepdauer.
Send, {ALT down}f
Sleep, 200
Send {Alt up}
Sleep, 1000
Send, {f10}
Sleep, 2000
Send, {Control down}
Sleep, 200
Send, +
Sleep, 200
Send, {Control up}
Sleep, 200
Return
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Sleep-Befehle ersetzen

26 Jul 2019, 10:51

Moin,

in Deinem Beipiel kann ich nichts erkennen, was wirklich langsamer laufen sollte. Das Skript befindet sich ja fast ausschließlich im Sleep-Modus, und der wird durch die Prozessorgeschwindigkeit kaum beeinflusst. 200 Millisekunden sind auch bei abgesenktem Prozessortakt eine 'Ewigkeit'. Die Anwendung, die das Ziel der Send-Anweisungen ist, könnte allerdings wirklich 'gebremst' laufen.
WPLPHSS
Posts: 162
Joined: 04 Feb 2017, 05:34

Re: Sleep-Befehle ersetzen

26 Jul 2019, 11:11

Kann man das Skript nicht so einstellen, dass unabhängig von der Taktung des Prozessors die Befehle (ohne Sleep) nacheinander abgearbeitet werden? Gibt es hierfür einen Befehl, den ich anstelle von Sleep in das Makro ersetzen könnte?
User avatar
LuckyJoe
Posts: 340
Joined: 02 Oct 2013, 09:52

Re: Sleep-Befehle ersetzen

26 Jul 2019, 11:20

Hi,

schau dir doch mal die Hilfe zu SetBatchLines und / oder zu SetKeyDelay an.

HG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
WPLPHSS
Posts: 162
Joined: 04 Feb 2017, 05:34

Re: Sleep-Befehle ersetzen

27 Jul 2019, 02:33

Guten Morgen!

Bringt leider nicht den gewünschten Erfolg. Die Skript soll einfach nur nach der Reihenfolge der Befehle abgearbeitet werden.
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Sleep-Befehle ersetzen

27 Jul 2019, 03:03

Moin,

ich verstehe das nicht. Wenn Du keine Sleep Anweisungen haben willst, lösche sie. Normalerweise braucht man sie nach Send nur dann, wenn das Zielprogramm längere Zeit braucht, um die empfangenen Daten zu verarbeiten.
User avatar
divanebaba
Posts: 805
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: Sleep-Befehle ersetzen

27 Jul 2019, 03:11

Hier eine mögliche prinzipielle Vorgehensweise, die ich aus Mangel an Kenntnissen nicht komplett ausgearbeitet habe.
Folgendes Prinzip: Feststellen, ob Akkubetrieb oder nicht und dementsprechend einen Faktor festlegen.

Code: Select all

; [Pseudocode] if "An der Steckdose"
x = 1
else
x = 2
...
sleep % 200*x
...
Jetzt musst Du nur noch herausfinden, ob man den Energieversorgungsstatus einfach abfragen kann.
Einfach nur ein toller Typ. :mrgreen:
WPLPHSS
Posts: 162
Joined: 04 Feb 2017, 05:34

Re: Sleep-Befehle ersetzen

27 Jul 2019, 03:23

Die Sleep-Befehle hatte ich gelöscht.

Send, {ALT down}
Send, f
Send, o
Send, o
Send, {Alt up}
Return

Alt f startet einen Assistenten als Fenster im Programm. Der Startvorgang dauert ca. 3 Sekunden. Jedoch werden vom o. g. Skript nicht Alt o und Alt o verarbeitet.
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Sleep-Befehle ersetzen

27 Jul 2019, 04:07

Wenn der 'Assistent' als eigenes Fenster startet und dieses Fenster dann Alt+o verarbeiten soll, musst Du darauf warten, dass dieses Fenster aktiviert ist, bevor Du weitermachst.

Wenn Du für das Fenster eindeutige Kriterien ermitteln kannst, reicht dafür ein WinWaitActive
WPLPHSS
Posts: 162
Joined: 04 Feb 2017, 05:34

Re: Sleep-Befehle ersetzen

27 Jul 2019, 06:42

Aber das Fenster hat keine eindeutigen Kreiterien. Pech gehabt. Ich habe den Programmhersteller daher angeschrieben, Fenstertitel und -klassen zu definieren.

Vielen Dank für eure Beiträge.
User avatar
LuckyJoe
Posts: 340
Joined: 02 Oct 2013, 09:52

Re: Sleep-Befehle ersetzen

28 Jul 2019, 00:53

Hast du das mal mit Window Spy überprüft?
Um welches Programm handelt es sich denn eigentlich?
Herzliche Grüße aus dem Rheinland
Lucky Joe
Rohwedder
Posts: 7616
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: Sleep-Befehle ersetzen

28 Jul 2019, 01:12

Hallo,
einfach darauf warten, daß ein anderes Fenster aktiv wird.

Code: Select all

HWND := WinActive("A")
Send, {ALT down}f
Sleep, 200
Send {Alt up}
WinWaitNotActive, ahk_id %HWND%
Send, {f10}
WPLPHSS
Posts: 162
Joined: 04 Feb 2017, 05:34

Re: Sleep-Befehle ersetzen

30 Jul 2019, 00:47

Guten Morgen!

Ich bin das Skript noch am testen. Aber es läuft besser als die vorherigen. Ich werde mich wieder melden. Vielen Dank.
WPLPHSS
Posts: 162
Joined: 04 Feb 2017, 05:34

Re: Sleep-Befehle ersetzen

09 Aug 2019, 07:05

Ich habe es jetzt ausgiebig mit Sfirm 4.0 (Bankingprogramm) getestet. Es funktioniert leider nicht.

::-sf::
Run, C:\Program Files (x86)\SFirmV4\SFirm.exe
HWND := WinActive("SFirm Anmeldung")
Sleep, 200
WinWaitNotActive, ahk_id %HWND%
Sleep, 200
Send, 123456
Return
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Sleep-Befehle ersetzen

09 Aug 2019, 07:24

Moin,
wenn das nicht funktioniert, wäre für mich die erste Maßnahme:

Code: Select all

::-sf::
Run, C:\Program Files (x86)\SFirmV4\SFirm.exe
HWND := WinActive("SFirm Anmeldung")
MsgBox, HWND = %HWND%
...
WPLPHSS
Posts: 162
Joined: 04 Feb 2017, 05:34

Re: Sleep-Befehle ersetzen

09 Aug 2019, 07:45

Vielen Dank. Ich bin einen Schritt weiter.

Nach der Ausführung erscheint die Meldung in der MSgBox: HWND = 0x0.

Wie bekomme ich die Meldung im Vordergrund, dass das Makro weiterarbeiten kann?
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Sleep-Befehle ersetzen

09 Aug 2019, 08:05

Wenn der Fenstertitel in WinActive("SFirm Anmeldung") korrekt ist, solltest Du Dir mal WinWaitActive anschauen.
User avatar
LuckyJoe
Posts: 340
Joined: 02 Oct 2013, 09:52

Re: Sleep-Befehle ersetzen

09 Aug 2019, 08:10

... insbesondere, weil du in deinem Script auf
WinWaitNotActive, ahk_id %HWND%
prüfst ;-)
Herzliche Grüße aus dem Rheinland
Lucky Joe
WPLPHSS
Posts: 162
Joined: 04 Feb 2017, 05:34

Re: Sleep-Befehle ersetzen

09 Aug 2019, 09:45

Nach 10 Sekunden kommt die MSgBox. Sie wird jedoch durch die SFirm Anmeldung überlagert. Wenn ich die Skundenzahl nach oben ändere, wird der Text 12345 nicht in das PW-Feld geschrieben.

::-sf::
Run, C:\Program Files (x86)\SFirmV4\SFirm.exe
HWND := WinActive("SFirm Anmeldung")
WinWaitActive, ahk_class #32770, ,10
MsgBox, HWND = %HWND%
Sleep, 200
Send, 123456
Return
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Sleep-Befehle ersetzen

10 Aug 2019, 03:44

Moin,

wenn die MsgBox nach wie vor HWND = 0x0 ausgibt, bedeutet das, dass WinActive("SFirm Anmeldung") kein passendes aktives Fenster gefunden hat. Das kann daran liegen, dass der gesuchte Titel falsch ist oder dass er zwar richtig ist, das Fenster aber zu diesem Zeitpunkt noch nicht existiert bzw. noch nicht aktiv ist (siehe auch SetTitleMatchMode und Fenstertitel-Parameter).

Wenn die MsgBox nach 10 Sekunden erscheint, bedeutet das höchstwahrscheinlich, dass die 10 Sekunden Wartezeit von WinWaitActive abgelaufen sind, d.h. kein Fenster gefunden wurde. Man kann das einfach überprüfen. Bei Zeitablauf wird die interne Variable ErrorLevel auf 1 gesetzt (-> WinWaitActice).

Um zu prüfen, ob Dein Fenstertitel korrekt ist, kannst Du Folgendes probieren:

Code: Select all

::-sf::
Run, C:\Program Files (x86)\SFirmV4\SFirm.exe
Start := A_TickCount
WinWaitActive, SFirm Anmeldung, , 10
If (ErrorLevel)
	MsgBox, Das Fenster 'SFirm Anmeldung' wurde nicht innerhalb von 10 Sekunden aktiviert.
Else
	MsgBox, % "Das Fenster 'SFirm Anmeldung' wurde nach " . Round( (A_TickCount - Start) / 1000, 3)  . " Sekunden aktiviert."
Return

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Meister Lampe, WPLPHSS and 26 guests