Laufenden Process mit Pfad finden
-
Ich möchte gerne aus der Process Liste einen Process, nur durch die Angabe des Pfades finden z.B. C:\bla\bla.exe wie stelle ich das an ?
-
Dazu musst du afaik alle Prozesse durchgehen und dir von jedem den Pfad holen - diesen vergleichst du dann mit deinem zu suchenden Pfad
-
Soweit klappt auch alles, ich bekomme aber nur notepad.exe und nicht den Pfad C:\Windows\System32\notepad.exe wie baue ich am besten GetModuleFilename ein hoffe das heisst so.
-
HMODULE hModule; EnumProcessModules(hProcess,&hModule,sizeof(HMODULE),NULL); TCHAR szName[MAX_PATH]; GetModuleFileNameEx(hProcess,hModule,szName,sizeof(szName)/sizeof(szName[0]));
-
Klappt alles bis auf eines:
Ich muss dafür wohl die Funktion DuplicateHandle Benutzen.Es geht darum, das ich wenn ich zb Notepad finde.
Er auch C:\Windows\System32\notepad.exe ausgeben soll wenn ich notepad mit dem prozess C:\haha.exe ausführe.
-
Dieses Problem ist nun auch schon gelöst habe wieder ein anderes:
Wenn ich versuche 2 Strings zu vergleichen also z.B.
"C:\\windows\\system32\\notepad.exe" muss der andere die gleiche formatierung haben, nun habe ich aber das Problem das wenn ich notepad normal aufrufe alles glatt geht, nur wenn ich eine Datei mit Notepad starte schreibt er NOTEPAD anstatt notepad.Was mir auch aufgefallen ist, dass er wenn ein Process von einem anderen aufgerufen wird PROGRA~1 anstatt Programme schreibt er kürzt alle mit ~1 ab wie kann ich diesen Vorgang verhindern oder das AusgabeFormat ändern konvertieren etc.
Bin für jeden noch so kleinen Denkanstoß dankbar.
-
Ist ja schön, dass du deine Problem alle alleine gelöst hast, aber wenn du sie schon ins Forum stellst, dann poste doch wemfalls auch die Anworten.
Zu Problem eins: Überleg mal selber. Wenn du zwei Strings vergleichst und du hast eine Funktion, die Groß- und Kleinschreibung unterscheidet, du das aber nicht willst, was könnte man da wohl machen?
Zu Problem zwei: GetLongPathName und Konsorten.
-
Vielen Dank Luckie genau das habe ich gesucht.
Mein Problem habe ich gelöst in dem ich:
1. Einen CreateToolhelp32Snapshot erzeugt habe
2. Alle Prozesse ausgelesen habe
3. Den Pfad zu den Prozessen mit GetModuleFileNameEx ausgelesen habe
4. Die Ausgabe mit tolower, GetLongPathName und Konsorten formatiert
5. Durch ordentliche Prüfung der beiden Namen meine Funktion fertiggestellt
Ich kann nur jedem Anfänger raten, sich keine fertigen Beispiele anzusehen mit
selber verstehen kommt man weiter auch wenn es länger dauert.
-
Gibt es auch eine 9x fähige Antwort auf GetModuleFileNameEx
?
-
Was willst du
-
Ich brauche eine möglichkeit die GetModuleFileNameEx Funktion z.B unter Windows 98 zu nutzen. Da sie erst ab NT unterstützt wird suche ich eine Alternative zum Prozess Pfad rauskriegen.
-
Sorry, war wohl etwas schwer von Begriff
Habe gerade mal gegoogled. Evtl. habe ich das auch falsch verstanden, aber ich denke dort ist szExeFile der PROCESSENTRY32-Struktur bereits der volle Pfad. Wie gesagt - reine Spekulation
-
szName ist schon richtig, aber darin befindet sich nur der exe name ohne Pfad.
Ich brauche schon eine Funktion zum Umwandeln in einen Pfad, nur geht die GetModuleFileNameEx halt nur unter windows nt.
-
I need $ schrieb:
szName ist schon richtig, aber darin befindet sich nur der exe name ohne Pfad.
Auch unter Windows 9x?! Hast du es dort getestet? Evtl. habe ich die Quellen auch nur falsch interpretiert
-
Bereits getestet, klappt nicht, da die Funktion unter Windows 9x nicht verwendet werden kann, steht auch in der MSDN ich suche eine Alternative.
-
Ich rede nicht von GetModuleFileNameEx, sondern von CreateToolhelp32Snapshot / Process32First. Hast du da unter Win9x getestet, was in szExeFile steht?
-
Wir reden wohl aneinander vorbei.
Ja habe ich !
In szExeFile steht z.B. notepad.exe und nicht C:\system32\notepad.exe und dieses resultat zu bekommen benötige ich GetModuleFileNameEx.
Für GetModuleFileNameEx brauche ich aber NT das will ich nicht darum suche ich nach einer Alternative.
-
Schade - hatte gehofft (bzw. das so verstanden), dass evtl. unter Win9x im Gegensatz zu NT in szExeFile der ganze Pfad steht
-
Danke flenders,
War mein Fehler, durch meine Funktion hat es nicht richtig unter 9x Funktioniert.
Habe es jetzt nochmal neu begonnen mit OS switch jetzt klappt es.
In szFileName steht unter 9x der Pfad unter NT muss man GetModuleFilenameEx benutzen.Meine frage ist nun, wie ich es schaffe das er unter 9x nicht nach der DLL für den GetModuleFilenameEx Befehl fragt den ich wiederum für NT brauche.
Hoffe das ist verständlich.Ziemlich verwirrende Geschichte das Ganze.
-
LoadLibrary/GetProcAddress oder über /DelayLoad:Psapi.dll
Siehe dazu: http://www.microsoft.com/msj/1298/win32/win321298.aspx
-
Da sag ich doch mal DANKE!
Sehr fein dieses Forum weiter so!
Klappt alles einwandfrei.