Hwnd von CreateProcess (über ProcessId)
-
Ich habe eine Anwednung mit CreateProcess gestartet. Dadruch habe ich ja die ProcessId. Wie kommt ich mit der zur hwnd der Anwednung?
-
Es gibt nicht das HWND, da die Anwendung ja auch mehrere Fenster haben kann, aber du kannst mit EnumWindows alle Fenster durchgehen und dann mit GetWindowThreadProcessId testen, ob das Fenster zu diesem Prozess gehört
-
Ich hab mir die Funktion mal angekuckt. Aber wie geht man das weiter?
-
Wo genau liegt jetzt dein Problem
-
Also ich mache das jetzt so:
bool CALLBACK MyEnumProc(HWND, LPARAM); bool CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam) { DWORD dwProcessId; GetWindowThreadProcessId(hWnd, &dwProcessId); if(dwProcessId == lParam) { MessageBox(NULL, "Beenden", "Test", MB_OKCANCEL | MB_DEFBUTTON1| MB_ICONEXCLAMATION ); PostMessage(hWnd, WM_CLOSE, 0, 0); } return(TRUE); } und so rufe ich es dann auf: [cpp] EnumWindows((WNDENUMPROC)MyEnumProc, pi.dwProcessId);
Nur leider Mekert er hier rum (Konflikt zwischen signed und unsigned):
if(dwProcessId == lParam)
Ich weis nur leider nichw arum.
-
Versuch's mal so:
if(dwProcessId == (DWORD)lParam)
-
Ok danke. Jetzt habe ich nur 1 problem. Er findet leider mein Fenster nicht.
-
Ok hat sich geklärt liegt an mir.
Wenn ich das so aufrufe:
HWND hwndex;
bool CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam) { DWORD dwProcessId; GetWindowThreadProcessId(hWnd, &dwProcessId); if(dwProcessId == (DWORD) lParam) { Sleep(1000); hwndex = hWnd; PostMessage(hwndex, WM_CLOSE, 0, 0); } return 1; }
PROCESS_INFORMATION pi; STARTUPINFO si = {sizeof(si)}; CreateProcess(NULL,loaderexe,NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS,NULL,loaderdir,&si,&pi); WaitForInputIdle(pi.hProcess, INFINITE); EnumWindows((WNDENUMPROC)MyEnumProc, pi.dwProcessId);
Wenn ich jetzt aber die Zeile:
PostMessage(hwndex, WM_CLOSE, 0, 0);
im zweiten teil entferne und hinter EnumWindows schreibe Meldet er zwar keinen Fehler aber das Programm wirt dann nich geschlossen.
-
hwndex ist eine globale Variable?
Evtl. werden auch mehrere Fenster dieses Prozesses gefunden (hwndex enthält am Ende den letzten Wert).To continue enumeration, the callback function must return TRUE; to stop enumeration, it must return FALSE.
Das hilft vielleicht