Wie kann man Prozesse einfrieren und beenden und danach wiederherstellen?

  • 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

    Einmal editiert, zuletzt von pceumel (14. Juli 2010 um 12:56)

  • 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 :/

  • 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 :D

  • 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

    Spoiler anzeigen
    [autoit]

    ;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;"

    [/autoit] [autoit][/autoit] [autoit]

    $vDLL = DllOpen ('Kernel32.dll')

    $hThreadSnap = DllCall($vDLL , "hwnd", "CreateToolhelp32Snapshot", "dword", $TH32CS_SNAPTHREAD, "dword", 0)

    [/autoit] [autoit][/autoit] [autoit]

    $vStruct = DllStructCreate ( $tagTHREADENTRY32 )
    DllStructSetData ($vStruct, "dwSize", DllStructGetSize ($vStruct))

    [/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit]
  • Danke an alle mitwirkenden hier bis jetzt,
    nun fehlt nur noch eine funktion um einen prozess komplett abzuspeichern und wieder einzuspielen !