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

Вниз

Закрытие др.приложение   Найти похожие ветки 

 
Peter_cc   (2005-03-09 18:10) [0]

Здравствуйте мастера!!!!
Как программно закрыть другое приложение, которое сейчас запущенно (известно как оно называется) Спасибо!


 
Sergey_Masloff   (2005-03-09 18:53) [1]


unit MainForm;

interface

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

type

 TfmMain = class(TForm)
   btProcessInfo: TButton;
   ListBox1: TListBox;
   btExit: TButton;
   btKill: TButton;
   procedure btProcessInfoClick(Sender: TObject);
   procedure btExitClick(Sender: TObject);
   procedure btKillClick(Sender: TObject);
 private

 public
   
 end;

var
 fmMain: TfmMain;

implementation
uses tlhelp32; {Tool Help Functions, Types, and Definitions}

{$R *.DFM}

procedure TfmMain.btProcessInfoClick(Sender: TObject);
var
 handler:thandle;
 data:TProcessEntry32;
 s : String;

 {Имя процесса это не String а массив символов. Для его чтения в String
  следующая функция:}
 function return_name : String;
   var
     i : byte;
     names : String;
 begin
   names := "";
   i := 0;
   while data.szExeFile[i] <> "" do begin
     {Читаем массив символов до терминального символа}
     names := names + data.szExeFile[i];
     inc(i);
   end;
   //return_name:=names;
   Result := names;
 end;

begin
 ListBox1.Items.Clear();
 handler:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);  {Получили мгновенный снимок процесов}
 if Process32First(handler,data) then begin
   {Так как к каждой строке в TStrings можно привязать свой объект (то есть
   указатель длиной в 4 байта) то эти 4 байта можно смело использовать
   для хранения чего-то что помещается в 4 байта, а именно ProcessId процесса
   имя которого записывается в саму строку. Кстати, сам указатель почистит
   за собой TStrings так что и с этого боку все хорошо }
   ListBox1.Items.AddObject(return_name,TObject(data.th32ProcessID));
   while Process32Next(handler,data) do begin
     s := return_name();
     ListBox1.Items.AddObject(s,TObject(data.th32ProcessID));
   end;
 end else
   showmessage("Ошибка получения информации!");
end;

procedure TfmMain.btExitClick(Sender: TObject);
begin
 Close();
end;

procedure TfmMain.btKillClick(Sender: TObject);
var
 VictimName : String;
 VictimProcessId : DWORD;
 s : String;
 VictimHandle : THandle;
begin
 if ListBox1.ItemIndex > 0 then
 begin
   VictimName := ListBox1.Items[ListBox1.ItemIndex];
   VictimProcessId := DWORD(ListBox1.Items.Objects[ListBox1.ItemIndex]);
   s := Format("Попробуем убить "%s"?",[VictimName]);
   if MessageBox(Self.Handle,PChar(s),"",MB_YESNO)=ID_YES then
   begin
     VictimHandle := OpenProcess(PROCESS_TERMINATE,False,VictimProcessId);
     if VictimHandle > 0 then {Если хэндл успешно получен}
     begin
       if TerminateProcess(VictimHandle,1)  then {Пробуем убить процесс пользуясь полученным хэндлом}
       begin
         ShowMessage(Format("%s убит",[VictimName]));
         ListBox1.Items.Delete(ListBox1.ItemIndex);
       end else
         ShowMessage(Format("%s не убит",[VictimName]))
     end else
       ShowMessage(Format("Не удалось получить хэндл с правом убиения для %s по ProcessId!",[VictimName]));
   end;
 end;
end;

end.


 
Sergey_Masloff   (2005-03-09 18:54) [2]

Лист бокс заполняется на форме выбираешь процесс и киляешь.



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

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

Наверх




Память: 0.47 MB
Время: 0.032 c
1-1110273056
ser35
2005-03-08 12:10
2005.03.20
отображение даты


1-1109943377
100a
2005-03-04 16:36
2005.03.20
Стандартные функции удаления файлов


3-1108633079
kblc
2005-02-17 12:37
2005.03.20
Access and LoginScreen


1-1109838806
mic_2000
2005-03-03 11:33
2005.03.20
Как в TreeView можно добавить CheckBox к элементам дерева


6-1105764535
Sicilla
2005-01-15 07:48
2005.03.20
indy