Page 2 of 2
Re: Script pausieren/fortsetzen
Posted: 03 Jul 2022, 02:00
by Gerdi
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.
Re: Script pausieren/fortsetzen
Posted: 03 Jul 2022, 05:45
by Boss55
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
Re: Script pausieren/fortsetzen
Posted: 03 Jul 2022, 10:08
by Boss55
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
Re: Script pausieren/fortsetzen
Posted: 03 Jul 2022, 16:34
by Gerdi
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!
Re: Script pausieren/fortsetzen
Posted: 04 Jul 2022, 05:01
by just me
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.
Re: Script pausieren/fortsetzen
Posted: 04 Jul 2022, 11:18
by Boss55
Hallo Leute !
Mann, Mann, Mann ihr seid echt hartnäckig !
@Gerdi
Bitte berichte mir so genau wie Du es kannst, wie dieses Skript durchläuft!
Das ist schnell erzählt, es funktioniert perfekt !!!!!
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.
Re: Script pausieren/fortsetzen
Posted: 05 Jul 2022, 10:19
by Gerdi
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.