Prozessnamen durch ID bekommen
-
Jochen Kalmbach schrieb:
So einfach ist das nicht.... starte mal unter XP einen Process mit mehr als 15 Zeichen

Und dann starte noch einen Prozess via COM mit mehr als 8 Zeichen
stimmt, wenn man kein besseres Beispiel hat dann ist das auch nicht so wichtig...
wer will den nen Prozess mit mehr als 15 Zeichen starten oder nen Com mit mehr als 8?
-
Was passiert denn wenn der Dateiname länger als 15 Zeichen ist? Und warum?
-
-
das ist aber .net und nicht winapi
-
Und was machst du, wenn die Exe mehr als ein mal gstarte wurde?
-
user32 schrieb:
das ist aber .net und nicht winapi
Und was glaubst Du worauf .NET aufsetzt?
-
Also wenn es laut Artikel der TaskManager von Windows 2000 noch nicht mal
geschafft hat, das Problem damals in den Griff zu bekommen, dann mache ich
mir darüber keine ernsthaften Sorgen !Ich vermute, das mit den 15 Zeichen hängt damit zusammen, dass Windows
intern für den Prozessnamen in der struct _EPROCESS im Feld char * ImageFileName[16]
von Haus aus nur max. 16 Zeichen reserviert hat, also
15 Zeichen plus abschließenden '\0' Character.Aber hey... davon geht die Welt nicht unter...

Nicht mal Firmen, die sehr sorgfältig auf eine lange und ausführliche
Namensgebung achten, geben der EXE einen Namen, der länger als 15
Zeichen ist. Zumindest habe ich so etwas noch nie gesehen und ich bin mir
sicher, ich werde es in meinem ganzen Leben auch nicht mehr. Und wenn doch,
dann ist das Problem bereits in Windows 8 oder so gelöst.Und was machst du, wenn die Exe mehr als ein mal gstarte wurde?
Haha, noch ein bisschen Verwirrung stiften hier, wie ? *grins*
...dann vergleiche ich alles aber nicht den Prozessnamen !!!!!!!
Dann sage ich dem User, er soll mit seiner Maus auf ein Fenster des jeweiligen
Prozesses klicken und hole mir dann über das Window Handle (HWND)
anschließend die zugehörige ProzessID. Oder so...Und wehe es kommt mir jetzt einer damit, so von wegen:
"und wenn das Programm gar keine Fenster hat, sondern eine Konsolenanwendung ist ?..."
Dann speichere ich mir zuerst die ID des zuerst laufenden Prozesses (mit
bekanntem Namen) irgendwo ab und gehe anschließend nochmal die
Prozessnamen durch. Und wenn dann der gleiche Prozessname plötzlich
nochmals mit einer anderen ID darin enthalten ist (weil das Programm in der
Zeit noch ein zweites Mal gestartet wurde), dann weiß ich, dass die gleiche EXE
in einer zweiten Instanz gestartet wurde und habe dessen ID auch noch."und wenn ich dann den Stecker hinten ausm PC rausziehe ?"
...dann bekomme ich gar nix mehr, nicht mal mehr eine Prozessliste mit weniger als 15 Zeichen ! :p
PS: Wisst ihr eigentlich, woran man erkennt, dass in einem Thread Verwirrung herrscht ??
Daran, dass der anfängliche Fragesteller (MarkusB.) in seinem Threadtitel
schreibt "Prozessnamen durch ID bekommen" und dann in seiner Fragestelltung "durch den Prozessnamen an die Prozess-ID" kommen will !Egal, ich sag nix mehr und halte jetzt mein dummes Maul.
The rest is up to you.MFG, kernel32
-
Danke kernel32
-
damit auch alle zufrieden sind

unsigned long GetProcessIdByName(const string& name) { if(name.length > 8) MessageBox(0, "DONT WORK!!", "DONT WORK!!", 0) return 0 else{ void* snapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 processEntry = { sizeof(PROCESSENTRY32) }; if(Process32First(snapshotHandle, &processEntry)) { do { string tempName = processEntry.szExeFile; transform(tempName.begin(), tempName.end(), tempName.begin(), tolower); if(tempName == name) { CloseHandle(snapshotHandle); return processEntry.th32ProcessID; } } while(Process32Next(snapshotHandle, &processEntry)); } return 0; } }
-
Besser wäre es wenn Du alternativ noch mit dem "ShortFileName" vergleichen würdest...
Schau doch mal einfach in die .NET Process-Klasse rein, dann siehst Du es
