Главная страница
    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.47 MB
Время: 0.011 c
1-15544
stim
2003-01-28 10:50
2003.02.06
Как скопировать программу во время её выполнения ?


3-15514
mate
2003-01-21 11:53
2003.02.06
Запрос в MSSQL


3-15487
VitGun
2003-01-20 18:18
2003.02.06
Номер строки в DBGrid


14-15833
samson
2003-01-22 09:10
2003.02.06
RXLib275


8-15768
vixic
2002-10-23 10:10
2003.02.06
Рисунок на канву Panel?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский