Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Вниз

Как убить задачу, зная только имя .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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.042 c
3-1174570341
DelphiLexx
2007-03-22 16:32
2007.06.10
Динамическое создание полей в FIBDataSet e


2-1179774236
Познающий
2007-05-21 23:03
2007.06.10
Окантовка текста


2-1179659324
ari_9
2007-05-20 15:08
2007.06.10
как из контекста устройства (HDC) получить битмап ?


15-1179109292
Slider007
2007-05-14 06:21
2007.06.10
С днем рождения ! 13 мая


15-1178608499
DemonP
2007-05-08 11:14
2007.06.10
портирование кода C++ -> Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский