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
Sleep-Befehle ersetzen
Moderator: jNizM
Re: Sleep-Befehle ersetzen
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.
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.
Re: Sleep-Befehle ersetzen
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?
Re: Sleep-Befehle ersetzen
Herzliche Grüße aus dem Rheinland
Lucky Joe
Lucky Joe
Re: Sleep-Befehle ersetzen
Guten Morgen!
Bringt leider nicht den gewünschten Erfolg. Die Skript soll einfach nur nach der Reihenfolge der Befehle abgearbeitet werden.
Bringt leider nicht den gewünschten Erfolg. Die Skript soll einfach nur nach der Reihenfolge der Befehle abgearbeitet werden.
Re: Sleep-Befehle ersetzen
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.
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.
- divanebaba
- Posts: 813
- Joined: 20 Dec 2016, 03:53
- Location: Diaspora
Re: Sleep-Befehle ersetzen
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.Jetzt musst Du nur noch herausfinden, ob man den Energieversorgungsstatus einfach abfragen kann.
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
...
Einfach nur ein toller Typ.
Re: Sleep-Befehle ersetzen
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.
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.
Re: Sleep-Befehle ersetzen
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
Wenn Du für das Fenster eindeutige Kriterien ermitteln kannst, reicht dafür ein WinWaitActive
Re: Sleep-Befehle ersetzen
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.
Vielen Dank für eure Beiträge.
Re: Sleep-Befehle ersetzen
Hast du das mal mit Window Spy überprüft?
Um welches Programm handelt es sich denn eigentlich?
Um welches Programm handelt es sich denn eigentlich?
Herzliche Grüße aus dem Rheinland
Lucky Joe
Lucky Joe
Re: Sleep-Befehle ersetzen
Hallo,
einfach darauf warten, daß ein anderes Fenster aktiv wird.
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}
Re: Sleep-Befehle ersetzen
Guten Morgen!
Ich bin das Skript noch am testen. Aber es läuft besser als die vorherigen. Ich werde mich wieder melden. Vielen Dank.
Ich bin das Skript noch am testen. Aber es läuft besser als die vorherigen. Ich werde mich wieder melden. Vielen Dank.
Re: Sleep-Befehle ersetzen
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
::-sf::
Run, C:\Program Files (x86)\SFirmV4\SFirm.exe
HWND := WinActive("SFirm Anmeldung")
Sleep, 200
WinWaitNotActive, ahk_id %HWND%
Sleep, 200
Send, 123456
Return
Re: Sleep-Befehle ersetzen
Moin,
wenn das nicht funktioniert, wäre für mich die erste Maßnahme:
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%
...
Re: Sleep-Befehle ersetzen
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?
Nach der Ausführung erscheint die Meldung in der MSgBox: HWND = 0x0.
Wie bekomme ich die Meldung im Vordergrund, dass das Makro weiterarbeiten kann?
Re: Sleep-Befehle ersetzen
Wenn der Fenstertitel in WinActive("SFirm Anmeldung") korrekt ist, solltest Du Dir mal WinWaitActive anschauen.
Re: Sleep-Befehle ersetzen
... insbesondere, weil du in deinem Script auf
prüfstWinWaitNotActive, ahk_id %HWND%
Herzliche Grüße aus dem Rheinland
Lucky Joe
Lucky Joe
Re: Sleep-Befehle ersetzen
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
::-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
Re: Sleep-Befehle ersetzen
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:
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
Who is online
Users browsing this forum: Noitalommi_2, Ragnar and 25 guests