Форум: "Основная";
Текущий архив: 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