Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как закрыть процесс [D6, D7, Win95/98]


Azbul ©   (2003-03-27 09:46:00) 

например IExplore.exe очень надо


jack128   (2003-03-30 21:56:00) [1]

ExitProcess завершает текущий, то есть твой собственный процесс...


azra3L   (2003-03-30 19:18:00) [2]

а что если использовать ExitProcess для "чистого" завершения...


jack128   (2003-03-30 14:43:00) [3]

___ALex___ © (30.03.03 04:05)
Не мешало бы точки и запятые расставить -).


> после "смерти" процесса все "следы" оставленные им во время
> своего существования "заметаются"


Никто ничего не заметает. Пока ты не закроешь хендл процесса, объект ядра "процесс" не будет уничтожен.
Я ж те давал ссылку на Рихтера - там все это описано -)


___ALex___   (2003-03-30 04:05:00) [4]

да это понятно
ему для общего случая дали


Morfein   (2003-03-29 21:33:00) [5]

Зачем такие сложности?
Окно эксплоера всегда содержит в заголовке текст "Microsoft Internet Explorer"... используете FindWindow, а результат передаёте в KillWindow();


procedure KillWindow(hWnd : dword);
var
dwProcessId : dword;
begin
dwProcessId:=0;
GetWindowThreadProcessId(hWnd, @dwProcessId);
if dwProcessId > 0 then
TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, false, dwProcessId), 0);
end;


Причём работать будет и под NT...


___ALex___   (2003-03-29 19:19:00) [6]

to jack128 закрываем хендл процесса которого скорее всего нет?
скорее всего потому что после возвращения управления TerminateProcess процесс может быть ещё не завершён
после "смерти" процесса все "следы" оставленные им во время своего существования "заметаются"
то есть строка CloseHandle(ph) не нужна


jack128   (2003-03-29 13:38:00) [7]

нужно ещё закрыть хендл процесса

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i: Byte;
PH : Thandle;
begin

for i := 0 to CheckListBox1.Count - 1 do
if CheckListBox1.Checked[i] then begin
ph := OpenProcess(PROCESS_TERMINATE, False, mid[i]);
TerminateProcess(ph,0);
CloseHandle(ph);
end;
Sleep(50);
FormActivate(nil)
end;


default   (2003-03-29 02:29:00) [8]

unit Temp;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi, ExtCtrls, TLHelp32, CheckLst, Buttons;

type
TForm1 = class(TForm)
CheckListBox1: TCheckListBox;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
procedure FormActivate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
mid: Array of Cardinal;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
var
sh: LongInt;
ps: PROCESSENTRY32;
i: Byte;
begin

i := 0;
SetLength(mid, 0);
CheckListBox1.Clear;
sh := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
ps.dwSize := SizeOf(ps);
if (sh <> -1) and Process32First(sh, ps) then begin
repeat
SetLength(mid, i + 1);
mid[i] := ps.th32ProcessID;
CheckListBox1.Items.Add(ps.szExeFile);
Inc(i);
until not Process32Next(sh, ps);
CloseHandle(sh);
end;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i: Byte;
begin

for i := 0 to CheckListBox1.Count - 1 do
if CheckListBox1.Checked[i] then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, False, mid[i]), 0);
Sleep(50);
FormActivate(nil)

end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin

FormActivate(nil)

end;

end.

скомпиль
там и IE закроет


QUE   (2003-03-27 09:54:00) [9]

Пошли ему сообщение Что-нибудь типа WM_DESTROY или WM_CLOSE


Наверх

Титульная страница Поиск, карта сайта Написать письмо