gibt es eine udf wenn ja wo die anhand der processlist pid den pfad angibt?
pathbypid udf anhand der processlist pid?
-
- [ offen ]
- Sithlord95
- Geschlossen
- Erledigt
-
-
-
die haben wir schon für unsere anwendungsliste(fenster) doch ich brauche eine für die przesse
-
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?
-
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):If $PID = -1 Then $PID = WinGetProcess(WinGetTitle("[active]"))
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?
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
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
next
_GUICtrlListView_EndUpdate($list_process) -
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$hProcess = _WinAPI_OpenProcess(0x00000400, True, $PID, True)
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
-
@Sith
Füge das folgende ein :
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)$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)Dazu brauchst du noch diese Funktion :
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: SalinNicht alle Prozesse liefern einen Anwendungspfad zurück .
-
thx raupi