(MFC mit dem...) Procress wieder beenden
-
-
Ich versteh noch nicht ganz! Ich bekomme ja über die PROCESS_INFORMATION die ID. Für PostMessage brauche ich aber das HWND. Wie bekomme ich mit der ProcessID das HWND um die Message senden zu können?
-
Ihr seid aber auch kein Stück kreativ.
BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam) { DWORD dwProcessId; GetWindowThreadProcessId(hWnd, &dwProcessId); if(dwProcessId == lParam) PostMessage(hWnd, WM_CLOSE, 0, 0); return(TRUE); } // Irgendwo im Programm PROCESS_INFORMATION pi; . . . EnumWindows(MyEnumProc, pi.dwProcessId);
[edit] Hätte ich nur gleich in den Artikel geschaut; dort wird es genau so gemacht. Augen auf! [/edit]
[ Dieser Beitrag wurde am 06.12.2002 um 14:16 Uhr von -King- editiert. ]
-
Wenn ich dass so mache, dann bekomme ich folgenden Compiler-Fehler:
error C2664: 'EnumWindows' : Konvertierung des Parameters 1
von 'BOOL (HWND,LPARAM)' in 'WNDENUMPROC' nicht möglichWass macht den das Enumwindows überhaupt?
-
EnumWindows ruft für jedes TopLevel-Window einmal die Funktion auf, die Du im ersten Parameter angibst. Diese Funktion muß natürlich eine bestimmte Signatur haben. Die Funktion, die Du dort angibst, ist keine gültige EnumProc.
[code]BOOL CALLBACK MyEnumProc(HWND, LPARAM)[/code]
-
Vielleicht steh ich ja heute mal wieder auf dem Schlauch, aber ich hab Sie aber so definiert wie Du gepostet hast:
BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam) { DWORD dwProcessId; GetWindowThreadProcessId(hWnd, &dwProcessId); if(dwProcessId == lParam) PostMessage(hWnd, WM_CLOSE, 0, 0); return(TRUE); }
Der Aufruf folgt dann später zum Test:
MessageBox("Jetzt wird geschlossen","test",0); EnumWindows(MyEnumProc, pi.dwProcessId);
-
Huch. Ich sehe da eigentlich kein Problem. Mach doch mal dieses
#define STRICT
bevor Du die Header includierst.
-
Ich benutze den Aufruf allerdings auch in einem MFC-Programm. Tut das was zur Sache?
-
MFC?
-
was ist denn mit king los?
-
MFC gehört nicht in den Aufgabenbereich dieses Forums.