![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Красиво убить другое приложение? [D6, Win95/98, WinME, NT4, Win2k, WinXP]
Serhio © (2003-11-02 19:11:00)
Подскажите, как можно красиво убить чужое приложение?
Ситуация такая: я знаю дескриптор главного окна приложения и посылаю ему WM_CLOSE, если у приложения в данный момент не открыто ни одного дочернего окна, то оно закрывается без проблем, если же было открыто дочернее окно, то приложение закрывается, но винда говорит "Application Error" - не хорошо
DVM (2003-11-04 21:00:00) [1]
Сначала попробуйте закрыть программу по-хорошему, а то после TerminateProcess остается много мусора.
Serhio (2003-11-04 17:31:00) [2]
Спасибо, заработало, только в приведенном примере, в строке
TerminateProcess(a, 0);//Убьет наповал :-)
вместо "а" надо поставить "H1", тогда точно убивает...
Дубинин Алексей (2003-11-03 23:57:00) [3]
Например H это тот дескриптор который ты знаешь. Далее проще...
var
a: Cardinal;
H1: HWND;
begin
GetWindowThreadProcessID(H, @a);
H1 := OpenProcess(PROCESS_TERMINATE, True, a);
TerminateProcess(a, 0);//Убьет наповал :-)
end;
kostik78ua (2003-11-03 09:44:00) [4]
function NTKillProcess(iProcessID: Integer): Integer;
var
hProcess: Integer;
pfnExitProcess: Pointer;
hInstance: Integer;
hThread: DWORD;
begin
Result:=ERROR_SUCCESS;
hProcess:=OpenProcess(PROCESS_ALL_ACCESS, FALSE, iProcessID);
if hProcess > 0 then begin
hInstance:=GetModuleHandle("KERNEL32.DLL");
pfnExitProcess:=GetProcAddress(hInstance, "ExitProcess");
hThread:=CreateRemoteThread(hProcess, nil, 0, pfnExitProcess, nil, 0,hThread);
if hThread>0 then begin
WaitForSingleObject(hThread, 40000);
if not CloseHandle(hThread) then Result:=GetLastError;
end else Result:=GetLastError;
CloseHandle(hProcess);
end else Result:=GetLastError;
end;
Копирайт - не мой :)
Nick Denry (2003-11-02 20:53:00) [5]
TerminateProcess see F1 Win32SDK