Просмотрщик запущенных процессовDelphi , Программа и Интерфейс , Процессы и Сервисы
Автор: Василий Программа не видна по Ctrl+Alt+Del, и сама оттуда же может спрятать любой из процессов(правда, не все с самого начала "светятся" по Ctrl+Alt+Del) или завершить его. Простой пример для знакомства с ToolHelp32. В исходном коде есть недоработки, например, процедура Delproc получает в качестве параметра строку, затем переводит ее в целочисленный тип(integer), хотя можно передавать сразу число. Заморочка была в проверке числа-индекса на подлинность, а так как я выдрал часть кода из более ранней своей проги, я не стал это менять, а просто подогнал до рабочей версии. Оптимизацией кода вы можете заняться сами по желанию(вы можете, если хотите, а если не хотите, то вы не обязаны, вы посто могли бы... да... :))) Программа не работала в WinNT 4.0, но в Win9x работать должна. unit main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, tlhelp32, StdCtrls, ComCtrls, Buttons; type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; Button2: TButton; Button4: TButton; Button5: TButton; StatusBar1: TStatusBar; Button6: TButton; procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private declarations } procedure ListProcesses; procedure Delproc(numb: string); public { Public declarations } end; var Form1: TForm1; processID: array[1..50] of integer; function RegisterServiceProcess(dwProcessID, dwType: integer): integer; stdcall; external 'kernel32.dll'; implementation {$R *.DFM} procedure TForm1.delproc(numb: string); var c1: Cardinal; pe: TProcessEntry32; s1, s2: string; x: integer; begin x := 0; try Strtoint(numb); except Statusbar1.SimpleText := 'Invalid number'; exit; end; c1 := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0); if c1 = INVALID_HANDLE_VALUE then begin Statusbar1.SimpleText := 'Process listing failed'; exit; end; try pe.dwSize := sizeof(pe); if Process32First(c1, pe) then repeat inc(x); s1 := ExtractFileName(pe.szExeFile); s2 := ExtractFileExt(s1); Delete(s1, length(s1) + 1 - length(s2), maxInt); if x = strtoint(numb) then if terminateprocess(OpenProcess(PROCESS_ALL_ACCESS, false, pe.th32ProcessID), 1) then begin Statusbar1.SimpleText := 'Process ' + s1 + ' terminated.'; end else Statusbar1.SimpleText := ('Couldnt terminate process' + pe.szExeFile); until not Process32Next(c1, pe); finally CloseHandle(c1); end; end; procedure Tform1.ListProcesses; var c1: Cardinal; pe: TProcessEntry32; s1, s2: string; x: integer; begin X := 0; c1 := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0); if c1 = INVALID_HANDLE_VALUE then begin Statusbar1.SimpleText := ('Информация о процессах закрыта.'); exit; end; try pe.dwSize := sizeof(pe); if Process32First(c1, pe) then repeat inc(x); s1 := ExtractFileName(pe.szExeFile); s2 := ExtractFileExt(s1); Delete(s1, length(s1) + 1 - length(s2), maxInt); Listbox1.Items.Add(Inttostr(x) + ' ' + s1 + ' : ' + pe.szExeFile); ProcessId[x] := pe.th32ProcessID; //ListBox1.Items.Add(inttostr(pe.th32ProcessID)); until not Process32Next(c1, pe); finally CloseHandle(c1); end; end; procedure TForm1.Button4Click(Sender: TObject); begin Close; end; procedure TForm1.FormCreate(Sender: TObject); begin Button1.Enabled := false; Button5.Enabled := false; Button6.Enabled := false; ListProcesses; if not (csDesigning in ComponentState) then RegisterServiceProcess(GetCurrentProcessID, 1); end; procedure TForm1.Button2Click(Sender: TObject); begin Listbox1.Clear; ListProcesses; end; procedure TForm1.Button1Click(Sender: TObject); var p: integer; begin //hide with Listbox1 do p := Listbox1.Items.IndexOf(Listbox1.items[itemindex]) + 1; if not (csDesigning in ComponentState) then RegisterServiceProcess(ProcessID[p], 1); with Listbox1 do StatusBar1.SimpleText := (Listbox1.items[itemindex] + ' hidden'); end; procedure TForm1.Button5Click(Sender: TObject); var p: integer; begin //show with Listbox1 do p := Listbox1.Items.IndexOf(Listbox1.items[itemindex]) + 1; if not (csDesigning in ComponentState) then RegisterServiceProcess(ProcessID[p], 0); with Listbox1 do StatusBar1.SimpleText := (Listbox1.items[itemindex] + ' shown'); end; procedure TForm1.ListBox1Click(Sender: TObject); begin Button1.Enabled := true; Button5.Enabled := true; Button6.Enabled := true; end; procedure TForm1.Button6Click(Sender: TObject); var p: integer; begin with Listbox1 do p := Listbox1.Items.IndexOf(Listbox1.items[itemindex]) + 1; delproc(inttostr(p)); end; end. Программа на Delphi, которая позволяет пользователям просматривать и управлять запущенными процессами на их системе. Программа использует библиотеку В программе есть несколько процедур: Процедура Процедура Программа имеет несколько кнопок, которые позволяют пользователям взаимодействовать с запущенными процессами:
Процедура Некоторые предложения по улучшению:
В целом, это хороший старт для программы-менеджера процессов, но она требует дополнительной работы, чтобы сделать ее более robust и пользовательской. Программа для просмотра запущенных процессов, которая позволяет скрыть или прекратить выполнение любого процесса, используя библиотеку ToolHelp32. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Процессы и Сервисы ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |