![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как убить процесс [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;