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

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

Как убить процесс [D6, 2000]


vyper ©   (2006-09-25 18:44:00) 

Народ, а как программно убить процесс? Например по имени процесса (file.exe).


Gydvin   (2006-09-26 07:26:00) [1]


> Ну а если я имя сменю......типа opera1.exe


ТО


>   0: Showmessage('Мимо');


KLAUS   (2006-09-26 06:41:00) [2]

Ну а если я имя сменю......типа opera1.exe


ASoft   (2006-09-26 06:03:00) [3]


> vyper   (25.09.06 19:27) [6]
>
> собственно хочу убить delphi32.exe...

дожили...


Германн   (2006-09-26 01:11:00) [4]


> vyper   (25.09.06 18:44)
>
> Народ, а как программно убить процесс? Например по имени
> процесса (file.exe).

Да чё ж вас всех так зациклило на "убийствах"?


Leonid Troyanovsky   (2006-09-25 22:17:00) [5]


> vyper   (25.09.06 20:47) [9]

> собественно убиваю сетевой чат )


Убиение сетевых чатов не многим более грешно,
чем даже убивство локальных.

--
Regards, LVT.


vyper   (2006-09-25 20:47:00) [6]

именно то...
собественно убиваю сетевой чат )


Gydvin   (2006-09-25 19:55:00) [7]

Спер

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, TlHelp32;

type
 TForm1 = class(TForm)
   Button1: TButton;
   function KillTask(ExeFileName: string): integer;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.KillTask(ExeFileName: string): integer;
const
 PROCESS_TERMINATE = $0001;
var
 ContinueLoop: BOOL;
 FSnapshotHandle: THandle;
 FProcessEntry32: TProcessEntry32;
begin
 result := 0;

 FSnapshotHandle := CreateToolhelp32Snapshot
   (TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle,
   FProcessEntry32);

 while integer(ContinueLoop) <> 0 do
 begin
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
     UpperCase(ExeFileName))
     or (UpperCase(FProcessEntry32.szExeFile) =
     UpperCase(ExeFileName))) then
     Result := Integer(TerminateProcess(OpenProcess(
       PROCESS_TERMINATE, BOOL(0),
       FProcessEntry32.th32ProcessID), 0));
   ContinueLoop := Process32Next(FSnapshotHandle,
     FProcessEntry32);
 end;

 CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 case KillTask('opera.exe') of
   0: Showmessage('Мимо');
   1: Showmessage('Крантык');
 end;
end;

end.


Ega23   (2006-09-25 19:28:00) [8]


> Если хочешь закрывать какое-то определённое приложение,
> то оба (или один) параметра можно отследить:
>


1. Консольные приложения?
2. Просто сервисы?


vyper   (2006-09-25 19:27:00) [9]

собственно хочу убить delphi32.exe как это сделать?


DevilDevil   (2006-09-25 19:26:00) [10]

> Ega23 ©   (25.09.06 19:01) [2]
> Вот только зачастую ты не знаешь ни того ни другого.


Если хочешь закрывать какое-то определённое приложение, то оба (или один) параметра можно отследить:

function EnumWindowsProc(W : HWND; lParam : integer) : BOOL; stdcall;
var
 Cap, Cl : array[0..255] of char;
begin
 GetWindowText(W, Cap, 255);
 GetClassName(W, Cl, 255);
 Form1.Memo1.Lines.Add('Class = "'+Cl+'"; Caption = "'+Cap+'";');
 Result := true;
end;


TButton.OnClick:
begin
EnumWindows(@EnumWindowsProc, 0);
end;


Ega23   (2006-09-25 19:13:00) [11]


> TAppBuilder а если delphi, процесс же delphi32.exe называется


Процесс и окошко - разные весчи.


vyper   (2006-09-25 19:11:00) [12]

TAppBuilder а если delphi, процесс же delphi32.exe называется


Ega23   (2006-09-25 19:01:00) [13]


> Если знаешь класс и/или текст окна, то можно так:


Вот только зачастую ты не знаешь ни того ни другого.


DevilDevil   (2006-09-25 18:52:00) [14]

Если знаешь класс и/или текст окна, то можно так:

procedure KillProgram(Classname : string; WindowTitle : string);
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
CL, CAP : pchar;
begin

if Length(Classname)   > 0 then CL  := pchar(Classname)   else CL  := nil;
if Length(WindowTitle) > 0 then CAP := pchar(WindowTitle) else CAP := nil;

TheWindow := FindWindow(CL, CAP);
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess($0001, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;


TButton.OnClick:
begin
KillProgram('TAppBuilder', ''); // закрыть Билдер или Delphi
end;


Наверх

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