Über Processentry 32 HWND bekommen (Handle - Konvertierung?)
-
Salute,
Ich muss über die Prozessliste ein HWND bekommen.
Den Prozessnamen weiss ich, und kann somit die Prozessliste abgleichen.HWND MainWindowHandle(char ProcessName[]) { //CHAR bla[1024]; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if (hSnapshot == (HANDLE)-1) { printf("Unable to create a processlist snapshot..\r\n"); } PROCESSENTRY32 pe; pe.dwSize = sizeof(PROCESSENTRY32); printf("gathering processes....\r\n"); BOOL retval = Process32First(hSnapshot, &pe); while(retval) // loop each process { printf("Process ID : %08X\n",pe.th32ProcessID); printf("Process Name: %s\n", pe.szExeFile); if (stricmp(pe.szExeFile, ProcessName) == 0) { //HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE, FALSE, pe.th32ProcessID ); } pe.dwSize=sizeof(PROCESSENTRY32); retval=Process32Next(hSnapshot,&pe); } return NULL; }So, ein HANDLE könnte ich über "OpenProcess" bekommen.
Jedoch brauche ich das Windowhandle des Prozesses..
Wie komm ich dazu?Gruss,
Multamin
-
Hi

Du kannst mit EnumWindows alle HWNDs der Top-Level Fenster zurückerhalten und mit einem Aufruf von GetWindowThreadProcessId den Prozess dieser Fenster erhalten. Dann brauchst du nur noch die Prozess-Liste aus CreateToolhelp32Snapshot mit diesem Ergebnis abzugleichen. Unter Umständen gibt es da noch einen direkteren Weg, aber so hab ich mir einmal aus der HWND den Prozess geholt. Die Prozess-APIs hatten ja auf älteren Systemen (NT4/9x) den Nachteil, dass nicht jedes Windows alle APIs implementiert hatte

lg XOR
-
Und da das mal so garnichts mit Standard-C++ zu tun hat wirste verschoben. Demnächst bitte richtiges Forum raussuchen!
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.