(MFC mit dem...) Procress wieder beenden
-
Hallo ich habe mit folgendem Code einen Process gestartet:
STARTUPINFO startupInfo; PROCESS_INFORMATION pi; ZeroMemory(&startupInfo, sizeof(startupInfo)); ZeroMemory(&pi, sizeof(pi)); startupInfo.dwFlags = STARTF_RUNFULLSCREEN; CreateProcess(NULL,(LPTSTR)(LPCTSTR) m_czAppName,NULL, NULL, FALSE,CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &startupInfo, &pi);
Ist es möglich, diesen Process wieder durch einen Button zu beenden, also die Aufgerufene Anwendung zu schließen?
-
denke schon:
mit CreateWindow einen button erstellen, dem button eine ID zuweisen, und die in der WndProc abfangen
switch ( msg ) { case WM_COMMAND: { switch ( lparam ) { case BUTTON_ID: KillThread(); //oder was man da auch immer benutzt break; default: break; } } default: break; }
[ Dieser Beitrag wurde am 06.12.2002 um 12:20 Uhr von f00lish editiert. ]
-
-
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.