Taskmanager ListView Problem :/

  • Hallo Leute,

    baue grade an nem Taskmanager, funktioniert soweit auch ganz gut aber bei der prozessübersicht tritt der fehler auf das einträge verschoben sind :/ zb passt der eintrag bei path name nicht zu dem prozess namen.

    hier mein main script:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <Date.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <Funcs.au3>
    #include <WinAPIEx.au3>
    #include <Process.au3>

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

    Global $tmpUsage = _GetCPUUsage()
    Global $CPU_RegName = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString")
    Global $CPU_RegClock = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "~MHz") & " MHz"

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

    Opt("GUIOnEventMode", 1)

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

    $GUI = GUICreate("Taskmanager by k!llax2x", 720, 372, 275, 111, -1, $WS_EX_TOOLWINDOW)
    GUISetBkColor(0xF0F0F0)
    $t = GUICtrlCreateTab(8, 8, 705, 337)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    GUICtrlCreateTabItem("Processes")
    $lv1 = GUICtrlCreateListView("Process Name|PID|Process Creation Time|Process State|User|Process Path", 16, 40, 690, 294)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 100)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 40)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 130)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 83)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 84)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 5, 231)
    GUICtrlCreateTabItem("Applications")
    $lv2 = GUICtrlCreateListView("Window Name|Window Handle|Window Process|Window Process ID", 16, 40, 690, 294)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 290)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 129)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 120)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 147)
    GUICtrlCreateTabItem("Usage Overview")
    GUICtrlCreateGroup("CPU Usage", 24, 40, 329, 297)
    $cpu1 = GUICtrlCreateProgress(32, 80, 30, 113)
    GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 1", "CPU 1 Progressbar", 1)
    $cpu2 = GUICtrlCreateProgress(72, 80, 30, 113)
    GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 2", "CPU 2 Progressbar", 1)
    $cpu3 = GUICtrlCreateProgress(112, 80, 30, 113)
    GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 3", "CPU 3 Progressbar", 1)
    $cpu4 = GUICtrlCreateProgress(152, 80, 30, 113)
    GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 4", "CPU 4 Progressbar", 1)
    $cpu5 = GUICtrlCreateProgress(192, 80, 30, 113)
    GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 5", "CPU 5 Progressbar", 1)
    $cpu6 = GUICtrlCreateProgress(232, 80, 30, 113)
    GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 6", "CPU 6 Progressbar", 1)
    $cpu7 = GUICtrlCreateProgress(272, 80, 30, 113)
    GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 7", "CPU 7 Progressbar", 1)
    $cpu8 = GUICtrlCreateProgress(312, 80, 30, 113)
    GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 8", "CPU 8 Progressbar", 1)
    GUICtrlCreateLabel("CPU1", 32, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlCreateLabel("CPU2", 72, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlCreateLabel("CPU3", 112, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlCreateLabel("CPU4", 152, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlCreateLabel("CPU5", 192, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlCreateLabel("CPU6", 232, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlCreateLabel("CPU7", 272, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlCreateLabel("CPU8", 312, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlCreateLabel("CPU Information", 32, 200, 81, 17)
    GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
    $cpuProg = GUICtrlCreateProgress(40, 224, 54, 105, $PBS_VERTICAL)
    GUICtrlSetTip(-1, "Show the current CPU Usage of all CPUs", "CPU Progressbar", 1)
    GUICtrlCreateLabel("Processor Name", 120, 224, 77, 17)
    GUICtrlCreateLabel("Processor Clock", 120, 256, 77, 17)
    GUICtrlCreateLabel("Processors", 120, 288, 56, 17)
    $CPU_Name = GUICtrlCreateLabel($CPU_RegName, 120, 240, 220, 17, -1, $WS_EX_CLIENTEDGE)
    $CPU_Clock = GUICtrlCreateLabel($CPU_RegClock, 120, 272, 220, 17, $SS_CENTER, $WS_EX_CLIENTEDGE)
    $CPU_S = GUICtrlCreateLabel($tmpUsage[0], 120, 304, 220, 17, $SS_CENTER, $WS_EX_CLIENTEDGE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Memory Usage", 360, 40, 345, 297)
    $memProg = GUICtrlCreateProgress(368, 80, 326, 33, $PBS_SMOOTH)
    GUICtrlSetTip(-1, "Show the current RAM Usage", "RAM Progressbar", 1)
    $ram = GUICtrlCreateLabel("RAM (100%)", 368, 64, 63, 17)
    GUICtrlCreateLabel("Physical Memory(MB)", 368, 120, 105, 17)
    GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
    GUICtrlCreateLabel("Total:", 368, 136, 31, 17)
    GUICtrlCreateLabel("Available:", 368, 152, 50, 17)
    GUICtrlCreateLabel("Cached:", 368, 168, 44, 17)
    GUICtrlCreateLabel("Free:", 368, 184, 28, 17)
    GUICtrlCreateLabel("Kernel Memory(MB)", 368, 208, 96, 17)
    GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
    GUICtrlCreateLabel("Paged:", 368, 224, 38, 17)
    GUICtrlCreateLabel("Nonpaged:", 368, 240, 57, 17)
    GUICtrlCreateLabel("System", 368, 264, 38, 17)
    GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
    GUICtrlCreateLabel("Handles", 368, 280, 43, 17)
    GUICtrlCreateLabel("Threads", 368, 296, 43, 17)
    GUICtrlCreateLabel("Processes", 368, 312, 53, 17)
    $pm_total = GUICtrlCreateLabel("", 632, 136, 44, 17)
    $pm_av = GUICtrlCreateLabel("", 632, 152, 36, 17)
    $pm_chac = GUICtrlCreateLabel("", 632, 168, 48, 17)
    $pm_free = GUICtrlCreateLabel("", 632, 184, 42, 17)
    $km_page = GUICtrlCreateLabel("", 632, 224, 48, 17)
    $km_nonpa = GUICtrlCreateLabel("", 632, 240, 54, 17)
    $sys_handle = GUICtrlCreateLabel("", 632, 280, 57, 17)
    $sys_threads = GUICtrlCreateLabel("", 632, 296, 60, 17)
    $sys_process = GUICtrlCreateLabel("", 632, 312, 62, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateTabItem("")
    $mi1 = GUICtrlCreateMenu("&Data")
    $execute = GUICtrlCreateMenuItem("Execute...", $mi1)
    $end = GUICtrlCreateMenuItem("End Taskmanager", $mi1)
    GUISetState(@SW_SHOW)

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

    _FillProcessList()
    _FillWindowList()
    _GetRAMInfos()

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

    AdlibRegister("_FillProcessList", 20000)
    AdlibRegister("_FillWindowList", 10000)
    AdlibRegister("_GetRAMInfos", 1000)
    AdlibRegister("_UpdateCPU_Progressbars")

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

    While True
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $execute
    FileOpenDialog("Select File", @HomeDrive, "Executable(*.exe)")
    Case $end
    Exit
    EndSwitch
    WEnd

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

    Func _FillWindowList()
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($lv2))

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

    Local $WindowList = WinList()
    Local $WindowListItems = _GUICtrlListView_GetItemCount($lv2)
    Local $k = 0

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

    For $x = 1 To $WindowList[0][0]

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

    If $WindowList[$x][0] <> "" And IsVisible($WindowList[$x][1]) Then
    _GUICtrlListView_AddItem($lv2, $WindowList[$x][0], _GUICtrlListView_GetItemCount($lv2))

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

    $Executable = _WinAPI_GetProcessFileName(WinGetProcess($WindowList[$x][1]))
    $IconAnzahl = _GetIconCount($Executable)

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

    If $IconAnzahl = 0 Then
    GUICtrlSetImage($lv2, "icon.ico")
    Else
    GUICtrlSetImage($lv2, $Executable)
    EndIf

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

    If $WindowListItems = 1 Then
    $winPID = WinGetProcess($WindowList[$x][1])
    _GUICtrlListView_AddSubItem($lv2, $k, $WindowList[$x][1], 1)
    _GUICtrlListView_AddSubItem($lv2, $k, $winPID, 2)
    Else
    $k = $k + 1
    $winPID = WinGetProcess($WindowList[$x][1])
    _GUICtrlListView_AddSubItem($lv2, $k, $WindowList[$x][1], 1)
    _GUICtrlListView_AddSubItem($lv2, $k, $winPID, 2)
    EndIf
    EndIf
    Next
    #cs
    For $i = 1 To $WindowList[0][0]
    If $WindowListItems = 1 Then
    $winPID = WinGetProcess($WindowList[$i][1])
    _GUICtrlListView_AddSubItem($lv2, $k, $WindowList[$i][1], 1)
    _GUICtrlListView_AddSubItem($lv2, $k, $winPID, 2)
    Else
    $k = $k + 1
    $winPID = WinGetProcess($WindowList[$i][1])
    _GUICtrlListView_AddSubItem($lv2, $k, $WindowList[$i][1], 1)
    _GUICtrlListView_AddSubItem($lv2, $k, $winPID, 2)
    EndIf
    Next
    #ce
    EndFunc ;==>_FillWindowList

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

    Func _FillProcessList()
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($lv1))
    Local $processList = ProcessList()
    Local $processListItems = _GUICtrlListView_GetItemCount($lv1)
    Local $k = 0

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

    For $x = 0 To $processList[0][0]
    _GUICtrlListView_AddItem($lv1, "", _GUICtrlListView_GetItemCount($lv1))

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

    $AndwendungsPfad = _WinAPI_GetProcessFileName($processList[$x][1])

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

    $IconAnzahl = _GetIconCount($AndwendungsPfad)
    If $IconAnzahl = 0 Then
    GUICtrlSetImage($lv1, "icon.ico")
    Else
    GUICtrlSetImage($lv1, $AndwendungsPfad)
    EndIf
    Next

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

    For $i = 0 To $processList[0][0]
    If $processListItems = 1 Then
    _GUICtrlListView_AddSubItem($lv1,$k,$processList[$i][0],0)
    _GUICtrlListView_AddSubItem($lv1, $k, $processList[$i][1], 1)
    _GUICtrlListView_AddSubItem($lv1, $k, _ProcessTime($processList[$i][1]), 2)
    _GUICtrlListView_AddSubItem($lv1, $k, "running", 3)
    If _WinAPI_GetProcessUser($processList[$i][1]) = 0 Then _GUICtrlListView_AddSubItem($lv1, $k, @UserName, 4)
    _GUICtrlListView_AddSubItem($lv1, $k, _WinAPI_GetProcessFileName($processList[$i][1]), 5)
    Else
    $k = $k + 1
    _GUICtrlListView_AddSubItem($lv1,$k,$processList[$i][0],0)
    _GUICtrlListView_AddSubItem($lv1, $k, $processList[$i][1], 1)
    _GUICtrlListView_AddSubItem($lv1, $k, _ProcessTime($processList[$i][1]), 2)
    _GUICtrlListView_AddSubItem($lv1, $k, "running", 3)
    If _WinAPI_GetProcessUser($processList[$i][1]) = 0 Then _GUICtrlListView_AddSubItem($lv1, $k, @UserName, 4)
    _GUICtrlListView_AddSubItem($lv1, $k, _WinAPI_GetProcessFileName($processList[$i][1]), 5)
    EndIf
    Next

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

    EndFunc ;==>_FillProcessList

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

    Func _GetRAMInfos()
    Local $Data = _WinAPI_GetPerformanceInfo()

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

    ;Physical Memory
    GUICtrlSetData($pm_total, Floor($Data[3] / 1024 / 1024))
    GUICtrlSetData($pm_av, Floor($Data[4] / 1024 / 1024))
    GUICtrlSetData($pm_chac, Floor($Data[5] / 1024 / 1024))
    GUICtrlSetData($pm_free, Floor($Data[6] / 1024 / 1024))

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

    ;Kernel Memory
    GUICtrlSetData($km_page, Floor($Data[7] / 1024 / 1024))
    GUICtrlSetData($km_nonpa, Floor($Data[8] / 1024 / 1024))

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

    ;System
    GUICtrlSetData($sys_handle, $Data[10])
    GUICtrlSetData($sys_process, $Data[11])
    GUICtrlSetData($sys_threads, $Data[12])
    EndFunc ;==>_GetRAMInfos

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

    Func _UpdateCPU_Progressbars()
    Local $usage = _GetCPUUsage()
    Local $MemUsage = MemGetStats()

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

    GUICtrlSetData($cpuProg, $usage[1])
    GUICtrlSetData($memProg, $MemUsage[0])
    GUICtrlSetData($ram, "RAM (" & $MemUsage[0] & "%)")
    EndFunc ;==>_UpdateCPU_Progressbars

    [/autoit]

    Hier meine Funktionen:

    Spoiler anzeigen
    [autoit]

    ;Functions for Taskmgr
    #include-once

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

    Func _ProcessTime($pid)
    Local $aFT, $tFT, $tST

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

    If $pid > 0 Then
    $aFT = _WinAPI_GetProcessTimes($pid)
    If IsArray($aFT) Then
    $tFT = _Date_Time_FileTimeToLocalFileTime(DllStructGetPtr($aFT[0]))
    $tST = _Date_Time_FileTimeToSystemTime(DllStructGetPtr($tFT))
    Return _WinAPI_GetTimeFormat(0, $tST)
    EndIf
    EndIf
    EndFunc ;==>_ProcessTime

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

    Func _GetIconCount($sFilename)
    Local $iCount = DllCall("Shell32", "int", "ExtractIconEx", "str", $sFilename, "int", -1, "ptr", 0, "ptr", 0, "int", 1)
    If Not @error Then Return $iCount[0]
    Return 0
    EndFunc ;==>_GetIconCount

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

    Func _GetCPUUsage()
    Local Const $SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION = 8
    Local Const $SYSTEM_TIME_INFO = 3
    Local Const $tagS_SPPI = "int64 IdleTime;int64 KernelTime;int64 UserTime;int64 DpcTime;int64 InterruptTime;long InterruptCount"

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

    Local $CpuNum, $IdleOldArr[1], $IdleNewArr[1], $tmpStruct
    Local $timediff = 0, $starttime = 0
    Local $S_SYSTEM_TIME_INFORMATION, $S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
    Local $RetArr[1]

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

    Local $S_SYSTEM_INFO = DllStructCreate("ushort dwOemId;short wProcessorArchitecture;dword dwPageSize;ptr lpMinimumApplicationAddress;" & _
    "ptr lpMaximumApplicationAddress;long_ptr dwActiveProcessorMask;dword dwNumberOfProcessors;dword dwProcessorType;dword dwAllocationGranularity;" & _
    "short wProcessorLevel;short wProcessorRevision")

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

    ;Anzahl der CPUs bestimmen
    $err = DllCall("Kernel32.dll", "none", "GetSystemInfo", "ptr", DllStructGetPtr($S_SYSTEM_INFO))

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

    If @error Or Not IsArray($err) Then ;Fehler beim 1. Dll Aufruf
    Return $RetArr[0] = -1
    Else
    $CpuNum = DllStructGetData($S_SYSTEM_INFO, "dwNumberOfProcessors")
    ReDim $RetArr[$CpuNum + 1]
    $RetArr[0] = $CpuNum
    EndIf
    $S_SYSTEM_INFO = 0

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

    While 1
    ;Erstellen der Struktur für die Prozessor Performance
    $S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION = DllStructCreate($tagS_SPPI)
    ;Größe Struktur um später vielfache (MultiCore) der Structur lesen zu können
    $StructSize = DllStructGetSize($S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
    ;Erstellen einer Pufferstruktur
    $S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION = DllStructCreate("byte puffer[" & $StructSize * $CpuNum & "]")
    ;Pointer zum wiederfinden
    $pointer = DllStructGetPtr($S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)

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

    $err = DllCall("ntdll.dll", "int", "NtQuerySystemInformation", _
    "int", $SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, _
    "ptr", DllStructGetPtr($S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION), _
    "int", DllStructGetSize($S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION), _
    "int", 0)

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

    ;Fehler beim 2. Dll Aufruf
    If $err[0] Then
    Return $RetArr[0] = -2
    EndIf

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

    ;Struktur und Dll-Aufruf für Zeitmessung
    Local $S_SYSTEM_TIME_INFORMATION = DllStructCreate("int64;int64;int64;uint;int")
    $err = DllCall("ntdll.dll", "int", "NtQuerySystemInformation", _
    "int", $SYSTEM_TIME_INFO, _
    "ptr", DllStructGetPtr($S_SYSTEM_TIME_INFORMATION), _
    "int", DllStructGetSize($S_SYSTEM_TIME_INFORMATION), _
    "int", 0)

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

    ;Fehler beim 3. Dll Aufruf
    If $err[0] Then
    Return $RetArr[0] = -3
    EndIf

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

    If $starttime = 0 Then ;Startwerte Ermitteln
    ReDim $IdleOldArr[$CpuNum]
    ;Start-Informationen Auslesen
    For $i = 0 To $CpuNum - 1
    $tmpStruct = DllStructCreate($tagS_SPPI, $pointer + $i * $StructSize)
    $IdleOldArr[$i] = DllStructGetData($tmpStruct, "IdleTime")
    Next
    ;Startzeit ermitteln
    $starttime = DllStructGetData($S_SYSTEM_TIME_INFORMATION, 2)
    ;Verzögerung um einen Zeitunterschied sicher zu stellen
    Sleep(500)
    Else
    ReDim $IdleNewArr[$CpuNum]
    ;Neue Informationen auslesen
    For $i = 0 To $CpuNum - 1
    $tmpStruct = DllStructCreate($tagS_SPPI, $pointer + $i * $StructSize)
    $IdleNewArr[$i] = DllStructGetData($tmpStruct, "IdleTime")
    Next

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

    ;Zeitdifferenze in 100 nanosekunden
    $timediff = DllStructGetData($S_SYSTEM_TIME_INFORMATION, 2) - $starttime

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

    ;Auslastung errechnen
    For $i = 0 To $CpuNum - 1
    $RetArr[$i + 1] = Round(100 - (($IdleNewArr[$i] - $IdleOldArr[$i]) * 100 / $timediff))
    Next

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

    Return $RetArr
    EndIf

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

    ;Speicher wieder frei geben
    $S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION = 0
    $S_SYSTEM_TIME_INFORMATION = 0
    $tmpStruct = 0
    WEnd
    EndFunc ;==>_GetCPUUsage

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

    Func _ProcessSuspend($process)
    $processid = ProcessExists($process)
    If $processid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
    $i_sucess = DllCall("ntdll.dll", "int", "NtSuspendProcess", "int", $ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then
    Return 1
    Else
    SetError(1)
    Return 0
    EndIf
    Else
    SetError(2)
    Return 0
    EndIf
    EndFunc ;==>_ProcessSuspend

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

    Func _ProcessResume($process)
    $processid = ProcessExists($process)
    If $processid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
    $i_sucess = DllCall("ntdll.dll", "int", "NtResumeProcess", "int", $ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then
    Return 1
    Else
    SetError(1)
    Return 0
    EndIf
    Else
    SetError(2)
    Return 0
    EndIf
    EndFunc ;==>_ProcessResume

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

    Func IsVisible($handle)
    If BitAnd( WinGetState($handle), 2 ) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

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

    Func _GetPathByPid($iPID); gefunden im Englischen Forum , verfasser nicht bekannt.
    Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', 0x0410, 'int', 0, 'int', $iPID)
    If $aProc[0] = 0 Then Return SetError(1, 0, '')
    Local $vStruct = DllStructCreate('int[1024]')
    DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
    Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameExW', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'wstr', '', 'int', 2048)
    If $aReturn[0] = 0 Then Return SetError(2, 0, '')
    Return $aReturn[3]
    EndFunc

    [/autoit]

    desweiteren braucht man die WinAPIEx.au3:

    Spoiler anzeigen

    hoffe auf hilfe mfg killax2x