Текущий архив: 2003.02.06;
Скачать: CL | DM;
ВнизУбить процесс при помощи Delphi Найти похожие ветки
← →
9999 (2002-11-05 17:56) [0]Hello! Какая функция и какие её параметры используется для убиения процесса (запущенной программы)? Спасибо!!!
← →
vic_774N (2002-11-06 06:24) [1]Все просто :
.......
function TForm1.CloseProgram(ClassName: string; WindowText: string; Command: Word): Integer;
var
WindowHandle : HWND;
ErrorResult: Boolean;
Error: Integer;
begin
WindowHandle := FindWindow(PChar(ClassName), PChar(WindowText));
if ClassName = "" then WindowHandle := FindWindow(nil, PChar(WindowText));
if WindowText = "" then WindowHandle := FindWindow(PChar(ClassName), nil);
ErrorResult := PostMessage(WindowHandle, Command, 0, 0);
if ErrorResult then Error := GetLastError else Error := 0 ;
Result:= Error;
end;
........
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
Label1.Caption := IntToStr(CloseProgram(EClassName.Text,EWindowText.Text, WM_QUIT));
end;
end.
← →
SCHMaster (2002-11-11 03:31) [2]Можно и так ...
procedure TKiller.KillProgram(ClassName: PChar; WindowTitle: PChar);
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(Classname, WindowTitle);
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;
Эть само удийство ...
А список запущенных прог получаем где-то так ...
procedure TKiller.ProgList;
VAR
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN {Hе показываем:}
IF (Wnd <> Application.Handle) AND {-Собственное окно}
IsWindowVisible(Wnd) AND {-Hевидимые окна}
(GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
ListBox1.Items.Add(StrPas(buff));
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
ListBox1.ItemIndex := 0;
end;
← →
ZZ (2002-11-11 09:26) [3]Интересные блин способы для убиения процесса :))
А если у проги нет окна???
← →
SCHMaster (2002-11-12 03:28) [4]> ZZ ©
Пардон,вопрос был задан конкретно - "Какая функция и какие её параметры используется для убиения процесса (запущенной программы)?" И в первой части моего кода на него есть конкретный отвечает:
TerminateProcess(ProcessHandle,4);
Все остальное - просто пример, как получить идентификатор этого самого процесса. А по вопросу отсутствия окна и PID есть отдельные ветви форума.
← →
ZZ (2002-11-12 16:53) [5]А как можно догадаться, что TerminateProcess(ProcessHandle,4); и есть тот самый конкретный отвечает, а не GetWindowThreadProcessID(TheWindow, @ProcessID); или еще чего???
А по вопросу отсутствия окна и PID есть отдельные ветви форума.
Чего есть??
ЗЫ. Кстати, для какой цели передана 4-ка 2ым параметром???
← →
AngeL B. (2002-11-12 18:11) [6]
> ZZ ©
Слушая, иди почитай MSDN.
BOOL TerminateProcess(HANDLE hProcess, UINT uExitCode);
Второй параметр - код завершения процесса.
Результат - успешность операции (ба у тебя может не быть прав на удаление процесса).
← →
ZZ (2002-11-13 01:24) [7]AngeL B. открыл для себя MSDN :)
Так почему именно 4, а не 5 или 786 ??
← →
vidiv (2002-11-13 03:09) [8]потому что 4 это не 5 и не 786!
← →
AngeL B. (2002-11-13 09:44) [9]
> 2 ZZ:
> Так почему именно 4, а не 5 или 786 ??
Из того что ты спрашиваешь, я понимаю только то, что ты недопонимаешь что есть код завершения. И вообще, почем мне знать почему автор написал 4. Тебе не нравиться 4? Ну хорошо пусть будет 15. :)
← →
ZZ_ (2002-11-13 11:09) [10]AngeL B.
И вообще, почем мне знать почему автор написал 4.
Ну ты же вылез с советами :)
что ты недопонимаешь что есть код завершения.
Буду не против выслушать твою версию ... А то может действительно не(до)понимаю.
Так что обозначает 4ка? (ну не просто же так он это написал)
← →
SCHMaster (2002-11-14 02:42) [11]> ZZ_
Друг, повторяю, я ответил на вопрос (если не ответидл - докажи !!!. Код-то работает !!!). А на все остальные вопросы ответ можно получить элементарно - F1. Насколько я понимаю - тебе это сложно сделать :)). Добро - вот что написано в Help.
Извени, но переводить тебе придется самому (если конечно нужно :)) ).
The TerminateProcess function terminates the specified process and all of its threads.
BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);
Parameters
hProcess
Identifies the process to terminate.
Windows NT: The handle must have PROCESS_TERMINATE access. For more information, see Process Objects.
uExitCode
Specifies the exit code for the process and for all threads terminated as a result of this call. Use the GetExitCodeProcess
function to retrieve the process"s exit value. Use the GetExitCodeThread function to retrieve a thread"s exit value.
Кстати, с параметром 4 работает безотказно (по крайней мере пока :)) ), потому и написал 4 - чтоб меньше непоняток было, оказалось наоборот :)). Не нравится 4, юзай GetExitCodeProcess или GetExitCodeThread.
И без обид, ОК?
_______________________
> AngeL B.
Спасибо за советы.
← →
rasen (2002-11-28 12:11) [12]А вот у меня при тертимане процесс что 4 что все остальные варианты - все равно прога спрашивает а уверен ли я что хочу выйти :((((((
Страницы: 1 вся ветка
Текущий архив: 2003.02.06;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.01 c