... und alles was nicht mit den AutoIt Standardfunktionen lösbar ist, ist natürlich auch unlösbar...
Kompliziert ist es nicht. Es gibt zwei Wege. Zum einen kann man alle Threads pausieren (definitiv der umständlichere Weg) und zum anderen kann man die Funktionen aus der ntdll.dll nutzen.
PHP Code:
GUICreate("KD", 210, 260)
$List = GUICtrlCreateList("", 5, 5, 200, 188)
$B_Refresh = GUICtrlCreateButton("Aktualisieren", 5, 200, 200, 25)
$B_Suspend = GUICtrlCreateButton("Pausieren", 5, 230, 95, 25)
$B_Resume = GUICtrlCreateButton("Fortsetzen", 110, 230, 95, 25)
GUISetState()
While Sleep(10)
$Msg = GUIGetMsg()
Switch $Msg
Case -3
Exit
Case $B_Refresh
GUICtrlSetData($List, "")
$ProcessList = ProcessList()
For $i = 1 To $ProcessList[0][0]
GUICtrlSetData($List, $ProcessList[$i][0], True)
Next
Case $B_Suspend
_Suspend(GUICtrlRead($List))
If @error Then MsgBox(48, "Fehler", "Fehler beim pausieren des Threads!")
Case $B_Resume
_Resume(GUICtrlRead($List))
If @error Then MsgBox(48, "Fehler", "Fehler beim fortsetzen des Threads!")
EndSwitch
WEnd
Func _OpenProcess($ProcessId)
If Not ProcessExists($ProcessId) Then Return SetError(1, "", False)
$hProcess = DllCall("Kernel32.dll", "HWND", "OpenProcess", "DWORD", 0x800, "bool", False, "DWORD", $ProcessId)
If @error Then
Return SetError(2, "", False)
Else
Return SetError(0, "", $hProcess[0])
EndIf
EndFunc
Func _CloseHandle($hObj)
If Not IsHWnd($hObj) Then Return SetError(1, "", False)
DllCall("Kernel32.dll", "BOOL", "CloseHandle", "HWND", $hObj)
If @error Then
Return SetError(2, "", False)
Else
Return SetError(0, "", True)
EndIf
EndFunc
Func _Suspend($ProcessName)
$hProcess = _OpenProcess(ProcessExists($ProcessName))
If @error Or $hProcess == 0 Then SetError(1, "", False)
DllCall("ntdll.dll", "long", "NtSuspendProcess", "HWND", $hProcess)
If @error Then
Return SetError(2, "", False)
Else
Return SetError(0, "", True)
EndIf
EndFunc
Func _Resume($ProcessName)
$hProcess = _OpenProcess(ProcessExists($ProcessName))
If @error Or $hProcess == 0 Then SetError(1, "", False)
DllCall("ntdll.dll", "long", "NtResumeProcess", "HWND", $hProcess)
If @error Then
Return SetError(2, "", False)
Else
Return SetError(0, "", True)
EndIf
EndFunc