Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.10;
Скачать: CL | DM;

Вниз

Как убить задачу, зная только имя .exe   Найти похожие ветки 

 
LoRd1 ©   (2007-05-19 14:48) [0]

Люди помогите плиз с этой нелёгкой (для меня) задачей

полазил по просторам инета нашел много всего интересного но так и не смоз разобратся :(

одно из найденого меня заинтересовало:

{ Эта небольшая функция закрывает приложения, соответствующие заданному имени .exe.
 Пример: KillTask("notepad.exe");
                 KillTask("iexplore.exe"); }

uses
 Tlhelp32, Windows, SysUtils;

function 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;

вверху было написано что это пример завершения задачи експлорера (или блокнота) - не важно, в самом коде небыло и малейшего упоменания етих процесов!!

помогите разобратся плз!!

З.Ы.  если кто знает способ попроше буду признателен :)


 
Loginov Dmitry ©   (2007-05-19 15:14) [1]

> З.Ы.  если кто знает способ попроше буду признателен :)



procedure TerminateWindowProcess(Window: HWND);
 // Завершение процесса, к-рому принадлежит окно Window
var
 ProcessId: DWORD;
 Process: THandle;
begin
 GetWindowThreadProcessId(Window, ProcessId);
 Process:= OpenProcess(PROCESS_TERMINATE, False, ProcessId);
 if Process <> 0 then
 try
   TerminateProcess(Process, 0);
 finally
   CloseHandle(Process);
 end;
end;


 
LoRd1 ©   (2007-05-19 16:05) [2]

В данном примере мне не совсем понятно какой именно ехе-процес был прекращен :(

можно ли написать пример для завершения процеса winamp.exe (ведь вопрос был поставлен так: "как убить задачу, зная только имя .exe??") используя:

procedure TForm1.Button1Click(Sender: TObject)


 
X9 ©   (2007-05-19 16:15) [3]

> [0] LoRd1 ©   (19.05.07 14:48)

Что не устраивает в приведённом вами примере?


 
LoRd1 ©   (2007-05-19 16:24) [4]

1) не пойму куда ввести:

procedure TerminateWindowProcess(Window: HWND)

2) не вижу имя  ***.ехе  который убибают

3) хотелось бы увидить пример завершения кокого нибуть приложения, не входящего в стандартный комплект Винды.  Хотябы тогоже winamp.exe или BORGchat.exe !!


 
X9 ©   (2007-05-19 19:06) [5]

Вот пример использования вашего же кода:

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function 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
 KillTask(Edit1.Text);
end;

end.


Соответственно, на форме должны присутствовать контролы Edit1 класса TEdit и Button1 класса TButton.

P.S. Рановато вам решать такие задачи, если вы не можете подключить модуль и вызвать готовую подпрограмму. Учите матчасть.



Страницы: 1 вся ветка

Текущий архив: 2007.06.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
15-1178740607
lookin
2007-05-09 23:56
2007.06.10
Пароль от аськи


1-1176292741
MVA`
2007-04-11 15:59
2007.06.10
События на кнопках


2-1179416461
lavrenty
2007-05-17 19:41
2007.06.10
Log событий


1-1176409968
illuha
2007-04-13 00:32
2007.06.10
Установка


15-1179140715
oldman
2007-05-14 15:05
2007.06.10
Я вышел из леса...