Форум: "WinAPI";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизКрасиво убить другое приложение? Найти похожие ветки
← →
Serhio (2003-11-02 19:11) [0]Подскажите, как можно красиво убить чужое приложение?
Ситуация такая: я знаю дескриптор главного окна приложения и посылаю ему WM_CLOSE, если у приложения в данный момент не открыто ни одного дочернего окна, то оно закрывается без проблем, если же было открыто дочернее окно, то приложение закрывается, но винда говорит "Application Error" - не хорошо
← →
Nick Denry (2003-11-02 20:53) [1]TerminateProcess see F1 Win32SDK
← →
kostik78ua (2003-11-03 09:44) [2]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;
Копирайт - не мой :)
← →
Дубинин Алексей (2003-11-03 23:57) [3]Например H это тот дескриптор который ты знаешь. Далее проще...
var
a: Cardinal;
H1: HWND;
begin
GetWindowThreadProcessID(H, @a);
H1 := OpenProcess(PROCESS_TERMINATE, True, a);
TerminateProcess(a, 0);//Убьет наповал :-)
end;
← →
Serhio (2003-11-04 17:31) [4]Спасибо, заработало, только в приведенном примере, в строке
TerminateProcess(a, 0);//Убьет наповал :-)
вместо "а" надо поставить "H1", тогда точно убивает...
← →
DVM (2003-11-04 21:00) [5]Сначала попробуйте закрыть программу по-хорошему, а то после TerminateProcess остается много мусора.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c