Script pausieren/fortsetzen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: Script pausieren/fortsetzen

Post by Gerdi » 03 Jul 2022, 02:00

Mit der 99999999 scheint der Befehl nicht wie in der Hilfe beschrieben zu funktionieren.
Nehme ich zurück. Aber der Sleep-Befehl zwischen Run und Process wird benötigt,
sonst kann es passieren, dass der Prozess noch gar nicht richtig gestartet ist, wo bereits die Abfrage nach Prozessende erfolgt.
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick

Boss55
Posts: 31
Joined: 09 Oct 2021, 12:50

Re: Script pausieren/fortsetzen

Post by Boss55 » 03 Jul 2022, 05:45

Hallo !

@Gerdi

leider werden auch hier die nachfolgenden Aktionen ignoriert.
Mein laienhafter Gedanke war nun, der MsgBox(ohne die es scheinbar nicht geht) ein so kurzes timeout zu verpassen, das sie quasi unsichtbar ist, bekoom´s aber nicht hin.

Wrst du vuielleicht so freundlich, mir dahingehend Hilfestellung zu leisten ?

Schönen Sonntag

Boss55
Posts: 31
Joined: 09 Oct 2021, 12:50

Re: Script pausieren/fortsetzen

Post by Boss55 » 03 Jul 2022, 10:08

Hallo,

hat sich erledigt, habe zwar den timeout hinbekommen, aber dann werden wieder alle Befehle vor run und alle nach waitclose ignoriert. Frustrierend das.

bye

User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: Script pausieren/fortsetzen

Post by Gerdi » 03 Jul 2022, 16:34

Code: Select all

run "D:\Programme (x86)\Microsoft Office\Office12\MSACCESS.EXE" "F:\Eigene_Dateien\Datenbank\Musik\musik.mdb",,,MdbPID
sleep 1000
; MdbPID :=					; zum testen ohne ProcessID  Kommentar entfernen.
Process, Wait,%MdbPID%,4
if(ErrorLevel = 0)
{
	MdbId := WinExist("A")
	SoundBeep
}
else
	MdbId := WinExist("ahk_PID " MdbPID)
sleep 1000
MsgBox  64, Schließfreigabe ,nach schließen dieses Fensters`, kann die Schaltfläche zum Schließen der DB betätigt werden, 4
WinWaitClose, ahk_id %MdbId%
; Aktionen nach schließen der  Datenbank
MsgBox  64, Ende,  >%MdbID%< Fenster Schließung festgestellt, 4

ExitApp

LShift & Rshift::
ListLines
return
Bitte berichte mir so genau wie Du es kannst, wie dieses Skript durchläuft!
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick

just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Script pausieren/fortsetzen

Post by just me » 04 Jul 2022, 05:01

Gerdi wrote:@alle
es hatte allerdings nicht verlässlich funktioniert mit

Code: Select all

Process, WaitClose,%MdbPID%,99999999
wofür ich keine Erklärung habe.


Moin Gerdi,

eine Vermutung:

In der Hilfe findet sich zu SetTimer -> PeriodeOnOffDelete folgende Anmerkung:
Periode muss ein Integer sein, es sei denn, es wird eine Variable oder ein Ausdruck genutzt, dann werden alle Nachkommastellen ignoriert. Dessen absoluter Wert darf nicht größer als 4294967295 ms (49,7 Tage) sein.
Ich vermute nun, dass die Wartezeit für Process, WaitClose intern ähnlich verwaltet wird. Statt mit Sekunden wird mit Millisekunden gearbeitet. 99999999 Sekunden ergeben dann 99999999000 Millisekunden. Damit wird der höchstwert einer 32-bittigen Integerzahl überschritten.

Boss55
Posts: 31
Joined: 09 Oct 2021, 12:50

Re: Script pausieren/fortsetzen

Post by Boss55 » 04 Jul 2022, 11:18

Hallo Leute !

Mann, Mann, Mann ihr seid echt hartnäckig ! :thumbup: :thumbup: :thumbup:

@Gerdi
Bitte berichte mir so genau wie Du es kannst, wie dieses Skript durchläuft!
Das ist schnell erzählt, es funktioniert perfekt !!!!! :bravo:

Die DB startet, die 1. MsgBox popt auf und schliesst sich. Beendet man die DB geschieht das gleiche mit der 2. MsgBox.

Ich habe inzwischen etwas experimentiert, die MsgBoxen rausgenommen und durch ein paar andere Befehle ersetzt und alles läuft wie gewünscht.

Allen die hier gepostet haben vielen Dank für eure Zeit und Mühe.
Natürlich ein very special thx an den unermüdlichen Gerdi, der den Löwenanteil zur Lösung beigetragen hat

Bis demnäxt, der alte Mann.

User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: Script pausieren/fortsetzen

Post by Gerdi » 05 Jul 2022, 10:19

ich habe das Ganze noch in eine Funktion gesteckt:

Code: Select all

; Aufruf Beispiele:
; HK="
; Pfad:="c:\temp\Pfad mit Leerzeichen\Notiz.txt"
; Run_Wait(HK Pfad HK)

Run_Wait("explorer.exe")		; Startet ein Explorer-Fenster und wartet bis es geschlossen wird.
MsgBox, % Run_Wait("notepad.exe",,,PID) . " PID: " . PID . " beendet"

Run_Wait(Ziel,Arbeitsverz="",MaxMinHideUseErrorLevel="",ByRef VarPID="")		; wie RunWait, jedoch nur wenn der Prozess mindestens 1,6 Sekunden läuft!
; dafür werden auch Programme wie der Explorer unterstützt.
{
	Run,% Ziel,% Arbeitsverz,% MaxMinHideUseErrorLevel,VarPID
	Sleep 530
	Process, Wait,%VarPID%,1						; wartet bis Prozess sauber eingenistet und überprüft ob Prozess noch vorhanden.
	if(ErrorLevel = 0)								; Die PID ist nicht mehr vorhanden
	{												; Zweig der beim Starten und überwachen des Explorers verwendet wird
		VarId := WinExist("A")						; umschwenken aufs momentan Aktive Fenster
		; SoundBeep									; Akustische Meldung umschwenken
		WinWaitClose, ahk_id %VarId%				; warten auf das Schließen des Fensters
		return Ziel
	}
	Process, WaitClose,%VarPID%				; warten auf schließen des Prozesses
	if(ErrorLevel<>0)						; Errolevel auf 0 gesetzt
		MsgBox %A_LineFile% at %A_LineNumber%	nicht erwarteter Skriptzweig
	return Ziel
}
Voraussetzungen: Prozess besteht für mindestens 1,6 Sekunden, danach besteht noch eine PID oder ID

Kritik, Verbesserungen willkommen.
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick

Post Reply

Return to “Ich brauche Hilfe”