gibt es eine udf wenn ja wo die anhand der processlist pid den pfad angibt?
pathbypid udf anhand der processlist pid?
-
- [ offen ]
-
Sithlord95 -
10. Mai 2009 um 20:02 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
-
die haben wir schon für unsere anwendungsliste(fenster) doch ich brauche eine für die przesse
-
- Offizieller Beitrag
Welche Prozesse werden denn NICHT mit ProcessList() aufgelistet?
-
deine udf hat doch irgendwo drinne stehen wingetprocess dann ist die pid doch nur für die fenster oder nicht?
oder hab ich was falsch verstanden? -
Lol, für die UDF musst du doch die PID übergeben?
-
- Offizieller Beitrag
deine udf hat doch irgendwo drinne stehen wingetprocess
[autoit]
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):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]
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][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)$Prozesslist = processlist() ; Array enthält folgendes : Element 1 = Prozessname Element 2 = PID
[/autoit][autoit][/autoit][autoit]
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)$Count = $Count +1
[/autoit]
next
_GUICtrlListView_EndUpdate($list_process) -
- 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.
[autoit]
Soweit alles schön und gut, aber die Zeile$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
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
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)$Prozesslist = processlist() ; Array enthält folgendes : Element 1 = Prozessname Element 2 = PID
[/autoit]
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)Dazu brauchst du noch diese Funktion :
Spoiler anzeigen
[autoit]Func _WinGetPath($proc_pid="", $sInResString="", $iWholeWord=1)
[/autoit]
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: SalinNicht alle Prozesse liefern einen Anwendungspfad zurück .
-
thx raupi