Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.019 c
1-15548
arsen
2003-01-28 14:39
2003.02.06
Печать DBGrid


8-15762
Ваня
2002-10-23 09:54
2003.02.06
Шрифт, антиалиасинг, и т.п.


1-15602
Jaxtor
2003-01-29 10:44
2003.02.06
ComboBox и Button


1-15662
_vitek_
2003-01-25 02:56
2003.02.06
Random глючит...


1-15550
TAN
2003-01-28 15:26
2003.02.06
Дурацкий вопрос по копированию файлов