C++ Winapi Get hWnd



  • Hallo,
    ich möchte gerne ein anderes Programm schließen indem ich den eine Nachricht sende. Dafür brauch ich aber den hWnd vom Fenster. Ich hab jetzt mal so gegoolt und nur heraus gefunden wie ich den HANDLE bekomme aber das bringt mir ja nichts oder kann man mit Hilfe des HANDLES hWnd herausbekommen?

    PROCESSENTRY32 entry;
    		entry.dwSize = sizeof(PROCESSENTRY32);
    
    		HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    
    		if (Process32First(snapshot, &entry) == TRUE)
    		{
    			while (Process32Next(snapshot, &entry) == TRUE)
    			{
    				if (stricmp(entry.szExeFile, "chrome.exe") == 0)
    				{  
    					HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
    
    					SendMessage(hProcess, WM_DESTROY, NULL, NULL);
    
    					CloseHandle(hProcess);
    				}
    			}
    		}
    
    		CloseHandle(snapshot);
    

    Ist der Code so überhaupt richtig?
    Ich bin neu also sorry wenn ich was falsch gemacht hab 😃

    mfG
    Craftplorer;



  • Du schickst nicht dem Prozess die Nachricht, sondern einem Fenster. Da musst du EnumWindows aufrufen. Damit bekommst du erstmal alle Fenster, dann kannst du dir die Prozess ID von dem Fenster holen, und wenn es zu dem Prozess gehört, den du nicht magst, dann schickst du ihm deine Nachricht.



  • Ok klingt ja gut aber wie weiß ich welche ProzessID ich brauch und was brauch ich dafür? Also was sollte ich bei MSDN nachschauen?

    Ich möchte gerne den explorer.exe kicken also wie mach ich das nun?



  • CraftPlorer schrieb:

    Also was sollte ich bei MSDN nachschauen?

    Das was du brauchst 😉

    Prozesse kannst du mit EnumProcesses auflisten. Wenn du nach der Funktion bei MSDN suchst, findest du sicher ein Beispiel.



  • ...oder einfach mit FindWindow über den Titel (oder wenn du ProcExp o.ä. besitzt über die WndClass) nach dem Fenster suchen und das Handle holen und ihm die Nachricht schicken.



  • CraftPlorer schrieb:

    Ist der Code so überhaupt richtig?

    Was sagt denn der Compiler dazu ?

    Auf den ersten Blick ist das doch ein guter Start?

    CraftPlorer schrieb:

    Ok klingt ja gut aber wie weiß ich welche ProzessID ich brauch und was brauch ich dafür? Also was sollte ich bei MSDN nachschauen?

    Ich möchte gerne den explorer.exe kicken also wie mach ich das nun?

    Wenn Du einen Prozess beenden willst sollte doch der Prozesshandle reichen ?

    Und dann vermutlich TerminateProcess(...



  • BOOL KillProcessByHandle(HANDLE hProcess, DWORD dwTimeout) {
    	CreateRemoteThread(hProcess, 0, 0, ExitProcess, 0, 0, 0);
    
    	if(WaitForSingleObject(hProcess, dwTimeout) != WAIT_OBJECT_0) {
    		return TerminateProcess(hProcess, 0);
    	}
    
    	return TRUE;
    }
    


  • Wofür das TerminateProcess()?


Anmelden zum Antworten