Hi,
wie kann man Prozesse einfrieren und beenden und danach wiederherstellen mit Autoit?
So wie es Windows im Ruhezustand Energiesparmodus macht und den gesamten speicher auf die Festplatte holt.
lg pceumel
Hi,
wie kann man Prozesse einfrieren und beenden und danach wiederherstellen mit Autoit?
So wie es Windows im Ruhezustand Energiesparmodus macht und den gesamten speicher auf die Festplatte holt.
lg pceumel
Im Energiesparmodus packt er die Daten nicht weg, sondern fährt die Festplatte herunter
Du meinst dne Ruhezustand, wo er den Arbeitsspeicher auf die Festplatte zieht.
Aber kA wie das geht
Also einfrieren und dann weiterlaufen lassen geht (_ProcessSuspend, _ProcessResume). Aber ich weiß auch nicht, wie man das speichern kann...
Zitat^Im Energiesparmodus packt er die Daten nicht weg, sondern fährt die Festplatte herunter
Du meinst dne Ruhezustand, wo er den Arbeitsspeicher auf die Festplatte zieht.
gut dann den eben
müsste man nciht rein theoretisch nur die virtuelle memory auf die festplatte kopieren und beim nächsten neustart des programms die memory des tools mit der gespeicherten memory überschreiben? das sollte denke ich sogar in autoit gehen^^
müsste man nciht rein theoretisch nur die virtuelle memory auf die festplatte kopieren und beim nächsten neustart des programms die memory des tools mit der gespeicherten memory überschreiben? das sollte denke ich sogar in autoit gehen^^
mein ich ja
aber wie?
Ich habe hier was aus meiner Sammlung
;by Tom99
;$iOwnerPid ID des Prozesses. Lässt sich mit ProcessExists("Prozessname") ermitteln.
;$bResume [optional] True = Prozess fortführen/False = Prozess einfrieren
func _PauseResumeProcess( $iOwnerPid, $bResume = true)
Local Const $TH32CS_SNAPTHREAD = 0x00000004
Local Const $THREAD_SUSPEND_RESUME = 0x0002
Local Const $tagTHREADENTRY32 = "DWORD dwSize; DWORD cntUsage; DWORD th32ThreadID; DWORD th32OwnerProcessID; LONG tpBasePri; LONG tpDeltaPri; DWORD dwFlags;"
$vDLL = DllOpen ('Kernel32.dll')
$hThreadSnap = DllCall($vDLL , "hwnd", "CreateToolhelp32Snapshot", "dword", $TH32CS_SNAPTHREAD, "dword", 0)
$vStruct = DllStructCreate ( $tagTHREADENTRY32 )
DllStructSetData ($vStruct, "dwSize", DllStructGetSize ($vStruct))
$vReturn = DllCall ($vDLL, "int", "Thread32First", "hwnd", $hThreadSnap[0], "ptr", DllStructGetPtr ($vStruct))
if $vReturn[0] Then
Do
if DllStructGetData ( $vStruct, "th32OwnerProcessID") == $iOwnerPid Then
$vThread = DllCall ($vDLL, "hwnd", "OpenThread", "dword", $THREAD_SUSPEND_RESUME , "int", false, "dword", DllStructGetData ($vStruct, "th32ThreadID"))
if $bResume Then
DllCall ($vDLL, "dword", "ResumeThread", "hwnd", $vThread[0])
Else
DllCall ($vDLL, "dword", "SuspendThread", "hwnd", $vThread[0])
EndIf
EndIf
$vReturn = DllCall ($vDLL, "int", "Thread32Next", "hwnd", $hThreadSnap[0], "ptr", DllStructGetPtr ($vStruct))
Until @error or not $vReturn[0]
EndIf
DllCall ($vDLL, "int", "CloseHandle", "hwnd", $hThreadSnap[0])
EndFunc
Danke an alle mitwirkenden hier bis jetzt,
nun fehlt nur noch eine funktion um einen prozess komplett abzuspeichern und wieder einzuspielen !
nun fehlt nur noch eine funktion um einen prozess komplett abzuspeichern und wieder einzuspielen !
Das ist eigentlich viel komplexer wie du denkst. Denn jedes mal wenn ein Prozess startet bekommt er andere Speicheraddressen zugewiesen usw. Das Thema wurde in anderen Foren zu genüge schon diskutiert.
Ich frage mich schon den ganzen Thread lang nach dem tieferen Sinn…
Dann könnte man überhaupt erst ernsthaft über Lösungen nachdenken!
Johannes