Prozessname des Aktiven Fensters herausbekommen
-
Hi,
2 Tage versuche ich jetzt schon verzweifelt den Prozessnamen eines Aktiven Fensters herauszubekommen. Die Windowcaption des Fensters herauszubekommen war ja kein Problem,aber den Rest...
Dann hab ich mit dem Fensterhandle (HWND) welches ich für die Windowcaption gemacht habe per GetWindowThreadProcessId() die PID rausbekommen.
Ich kann auch schon alle laufenden Prozesse und ihre ProzessIDs ausgeben.
Und da ist mir aufgefallen das bei GetWindowThreadProcessId() eine andere PID raus kommt wie wenn ich alle Prozesse und ihre PIDs aufliste mit CreateToolhelp32Snapshot() ( siehe CreateToolhelp32Snapshot() ) Wenn die PID richtig wäre, könnte ich ja einfach mit dem Ergebnis von CreateToolhelp32Snapshot() die PIDs vergleichen und dann den zugehörigen Prozessnamen ausgeben. Doch leider sind sie nicht gleich, was dann wohl bedeutet, dass eine Funktion die falsche PID herausgibt...Ein weiteres Problem war (ich habe viele Funktionen ausprobiert) das ich das PSDK nicht verwenden will und viele Funktionen funktionieren nur damit (z.B. alle die PSAPI.H benötigen)!
Was gibt es denn noch für Möglichkeiten den Prozessnamen eines aktiven Fensters herauszubekommen?? Ich bin mir sicher, ich mach das mal wieder viel zu kompliziert!
Ich hab auch schon GetProcessById() ausprobiert doch leider kennt das Visual C++ nicht bei mir.

Ich benutze Visual C++ 6.
Versuch mit Fensterhandle auf die PID zu kommen:
HWND hFocus = GetForegroundWindow(); // Retrieve The Active Windows's Focus if (hFocus != PreviousFocus) // The Active Windows Has Change { PreviousFocus = hFocus; // Save The Old Active Windos Focus int WinLeng = GetWindowTextLength(hFocus); // Get The Active Windows's Caption's Length char *WindowCaption = (char*) malloc(sizeof(char) * (WinLeng + 2)); // Allocate Memory For The Caption GetWindowText(hFocus,WindowCaption,(WinLeng + 1)); // Retrieve The Active Windows's Caption DWORD idAttach = GetWindowThreadProcessId(hFocus, NULL); // Process ID durch Fensterhandle herausbekommen cout << "Process ID: " << idAttach << endl;Ich hoffe ich konnte mich einigermaßen klar ausdrücken

-
Wenn Du schon die Prozess-ID hast, brauchst Du doch bloss noch "OpenProcess" und "GetModuleFileNameEx" aufzurufen...
-
braucht man dafür keine psapi.h? weil die gibt es bei mir nicht. Und ich würde halt gerne auf das PSDK verzichten!
-
MaN0258 schrieb:
braucht man dafür keine psapi.h? weil die gibt es bei mir nicht.
Für OpenProcess nicht... für GetModuleFileNameEx bzw. GetModuleBaseName schon.
Was hast Du denn für eine IDE, da Du diese nicht hast?
-
Visual c++ 6
-
Nimm doch das letzte für VC6 gültige PSDK...
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
Du kannst theoretisch auch LoadLibrary/GetProcAddress verwenden; dann brauchst Du kein aktuelleres PSDK...
-
brauchen dann nicht alle die das programm verwenden wollen auch das PSDK??
-
Nein. Alle brauchen nur die "Psapi.dll", für NT findest Du diese hier:
http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=3d1fbaed-d122-45cf-9d46-1cae384097ac&displaylang=en
-
na wenn das so ist...
ich hab gesehen das die bei mir schon im windows ordner war! Kommt die dann von VC6 oder ist die standart in Win XP?
-
Ab W2k ist sie immer dabei...
-
ok, dann mal vielen dank für die hilfe.
und morgen werd ich das mal ausprobieren: http://www.codeguru.com/cpp/w-p/system/processesmodules/article.php/c2865/