Ü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.


Anmelden zum Antworten