pathbypid udf anhand der processlist pid?

    • Offizieller Beitrag

    deine udf hat doch irgendwo drinne stehen wingetprocess


    Ja, für den Fall, dass keine PID übergeben wird, wird damit der Prozeß des aktiven Fensters verwendet (steht auch in der Funktionsbeschreibung erklärt):

    [autoit]

    If $PID = -1 Then $PID = WinGetProcess(WinGetTitle("[active]"))

    [/autoit]


    Es gibt nicht nur WinList sondern auch ProcessList und letzteres gibt dir die PID der Prozesse.

  • ich wieß ja nich bei mir klappt das ncih . bugfix wie muss ich das deiner meinung nach machen?

    [autoit]


    Global $Count = 0
    Global $Prozesslist
    Global $List_Process = GUICtrlCreateListView("", 30, 50, 535, 285, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL), BitOR( $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP))
    GUICtrlSetResizing($List_process, $Gui_DockTop+$GUI_DockLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    _GUICtrlListView_beginUpdate($list_process)
    ; Add columns
    _GUICtrlListView_InsertColumn ($list_process, 0, "Prozessliste", 300)
    _GUICtrlListView_InsertColumn ($list_process, 1, "Pfad", 245)

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

    $Prozesslist = processlist() ; Array enthält folgendes : Element 1 = Prozessname Element 2 = PID
    For $i = 1 To $Prozesslist[0][0]
    _GUICtrlListView_AddItem ($list_process, $Prozesslist[$i][0], $Count)
    _GUICtrlListView_AddSubItem($list_process, _GUICtrlListView_GetItemCount($list_process) - 1, $Prozesslist[$i][1], 1)

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

    $Count = $Count +1
    next
    _GUICtrlListView_EndUpdate($list_process)

    [/autoit]
    • Offizieller Beitrag

    BugFix , was du Ihm schriebst hatte ich Ihn schon erklärt. Aber verstanden hat er es offensichtlich nicht ;( .

    Das Problem ist,er will mit den Daten aus der Prozessliste anhand deiner Funktion den Anwendungspfad ermitteln.
    Soweit alles schön und gut, aber die Zeile

    [autoit]

    $hProcess = _WinAPI_OpenProcess(0x00000400, True, $PID, True)

    [/autoit]


    wird scheinbar nicht richtig ausgeführt und es kommt ein Winapi Fehler

    _WINAPI_OpenProcess: Priviliged: Falscher Parameter.

    Ich denke mal es wird irgendwie versucht, die Daten eines gesperrten Prozesses auszulesen

    • Offizieller Beitrag

    @Sith

    Füge das folgende ein :

    Spoiler anzeigen
    [autoit]

    Global $Count = 0
    Global $Prozesslist,$Pfad
    Global $List_Process = GUICtrlCreateListView("", 30, 50, 535, 285, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL), BitOR( $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP))
    GUICtrlSetResizing($List_process, $Gui_DockTop+$GUI_DockLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    _GUICtrlListView_beginUpdate($list_process)
    ; Add columns
    _GUICtrlListView_InsertColumn ($list_process, 0, "Prozessliste", 300)
    _GUICtrlListView_InsertColumn ($list_process, 1, "Pfad", 245)

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

    $Prozesslist = processlist() ; Array enthält folgendes : Element 1 = Prozessname Element 2 = PID
    For $i = 1 To $Prozesslist[0][0]
    _GUICtrlListView_AddItem ($list_process, $Prozesslist[$i][0], $Count)
    $Pfad =_WinGetPath($Prozesslist[$i][1])
    If $Pfad="Ä" then $Pfad = ""
    _GUICtrlListView_AddSubItem($list_process, _GUICtrlListView_GetItemCount($list_process) - 1, $Pfad, 1)
    $Count = $Count +1
    next
    _GUICtrlListView_EndUpdate($list_process)

    [/autoit]

    Dazu brauchst du noch diese Funktion :

    Spoiler anzeigen
    [autoit]

    Func _WinGetPath($proc_pid="", $sInResString="", $iWholeWord=1)
    Local $hKernel32_Dll = DllOpen('Kernel32.dll'), $hPsapi_Dll = DllOpen('Psapi.dll')
    Local $aOpenProc, $aProcPath, $sFileVersion
    If $hKernel32_Dll = -1 Then Return SetError(1, 0, '')
    If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@SystemDir & '\Psapi.dll')
    If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@WindowsDir & '\Psapi.dll')
    If $hPsapi_Dll = -1 Then Return SetError(2, 0, '')
    Local $vStruct = DllStructCreate('int[1024]')
    Local $pStructPtr = DllStructGetPtr($vStruct)
    Local $iStructSize = DllStructGetSize($vStruct)
    $aOpenProc = DllCall($hKernel32_Dll, 'hwnd', 'OpenProcess', _
    'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $proc_pid)
    DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _
    'hwnd', $aOpenProc[0], _
    'ptr', $pStructPtr, _
    'int', $iStructSize, _
    'int_ptr', 0)
    $aProcPath = DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _
    'hwnd', $aOpenProc[0], _
    'int', DllStructGetData($vStruct, 1), _
    'str', '', _
    'int', 2048)
    Local $return = $aProcPath[3]
    DllClose($hKernel32_Dll)
    DllClose($hPsapi_Dll)
    Return $return
    EndFunc ; Author: Salin

    [/autoit]

    Nicht alle Prozesse liefern einen Anwendungspfad zurück .