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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.039 c
4-1107412855
vratar
2005-02-03 09:40
2005.03.20
Защита диска от копирования


1-1109831333
Veles
2005-03-03 09:28
2005.03.20
Преобразование в HEX


1-1109865606
sloug
2005-03-03 19:00
2005.03.20
ToolBar меняет цвет


4-1107414279
ksa2002
2005-02-03 10:04
2005.03.20
Переменные в потоке


8-1101715834
Алексей
2004-11-29 11:10
2005.03.20
WinampAPI





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