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

Вниз

Менеджер процессов   Найти похожие ветки 

 
SpyBoy ©   (2005-07-03 11:48) [0]

Можете привести пример простенького менеджера процессов:
В ЛистБоксе отображаются все процессы.


 
ferr ©   (2005-07-03 11:53) [1]

procedure TForm1.Button1Click(Sender: TObject);
var
 Wnd: hWnd;
 buff: array[0..127] of Char;
begin
 ListBox1.Clear;
 Wnd := GetWindow(Handle, gw_HWndFirst);
 while Wnd <> 0 do begin {Не показываем:}
   if (Wnd <> Application.Handle) and {-Собственное окно}
     IsWindowVisible(Wnd) and {-Невидимые окна}
     (GetWindow(Wnd, gw_Owner) = 0) and {-Дочернии окна}
     (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков}
     then begin
     GetWindowText(Wnd, buff, sizeof(buff));
     ListBox1.Items.Add(StrPas(buff));
   end;
   Wnd := GetWindow(Wnd, gw_hWndNext);
 end;
 ListBox1.ItemIndex := 0;
end;

© DelphiWorld


 
SpyBoy ©   (2005-07-03 12:37) [2]

Но так показываются лишь приложения(Названия окон процессов), а надо , чтобы Все процессы, включая и SVHOST,Lsass


 
Alexander Panov ©   (2005-07-03 12:38) [3]

ЧТо ты понимаешь под понятием "менеджер процессов"?


 
lookin ©   (2005-07-03 12:43) [4]

Только вы уж сами тут разбирайтесь...

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 tlhelp32, StdCtrls, ComCtrls, ExtCtrls, Menus, Tabnotbk;

type
 TForm1 = class(TForm)
   Timer1: TTimer;
   PopupMenu1: TPopupMenu;
   Terminateprocess1: TMenuItem;
   TabbedNotebook1: TTabbedNotebook;
   ListView1: TListView;
   ListView2: TListView;
   PopupMenu2: TPopupMenu;
   Activateapplication1: TMenuItem;
   Closeapplication1: TMenuItem;
   Gettext1: TMenuItem;
   procedure FormShow(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure Terminateprocess1Click(Sender: TObject);
   procedure ListView1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure Activateapplication1Click(Sender: TObject);
   procedure ListView2MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure Closeapplication1Click(Sender: TObject);
   procedure Gettext1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
 procedure StopProcess(ProcessID,ThreadID: dword);
 procedure SortWindow;
procedure SimulateKeystroke(Key : byte; extra : DWORD);

var
 Form1: TForm1;
 selecteditem: TListItem;
 h,h1: hwnd;
 p: array [0..255] of char;
 no,ist: boolean;
 s: string;
 equ: integer;

implementation

{$R *.DFM}

procedure TForm1.FormShow(Sender: TObject);
var pe32: PROCESSENTRY32;
   num,i: integer;
   hd: hwnd;
   d: dword;
   hl: hlocal;
begin
 selecteditem:=nil;
 hd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Process32First(hd,pe32); num:=0;
 while Process32Next(hd,pe32) do begin
 if num=0 then ListView1.Items.Clear; ListView1.Items.Add;
 ListView1.Items.Item[num].Caption:=pe32.szExeFile;
 ListView1.Items.Item[num].SubItems.Insert(0,IntToStr(pe32.pcPriClassBase));
 ListView1.Items.Item[num].SubItems.Insert(1,IntToStr(pe32.cntUsage));
 ListView1.Items.Item[num].SubItems.Insert(2,IntToStr(pe32.th32ProcessID));
 ListView1.Items.Item[num].SubItems.Insert(3,IntToStr(pe32.th32DefaultHeapID));
 ListView1.Items.Item[num].SubItems.Insert(4,IntToStr(pe32.cntThreads));
 ListView1.Items.Item[num].SubItems.Insert(5,IntToStr(pe32.th32ParentProcessID));
 ListView1.Items.Item[num].SubItems.Insert(6,IntToStr(pe32.th32ModuleID));
 num:=num+1; end;
 h:=Form1.Handle; h1:=h; no:=false;
 while no=false do begin ist:=false; h:=GetNextWindow(h,GW_HWNDNEXT);
 if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
 for i:=0 to ListView2.Items.Count-1 do
 if s=ListView2.Items.Item[i].Caption then begin ist:=true; break; end;
 if (s<>"") and (ist=false) then begin ListView2.Items.Add;
 ListView2.Items.Item[ListView2.Items.Count-1].Caption:=s;
 end; end; h:=h1; no:=false;
 while no=false do begin ist:=false; h:=GetNextWindow(h,GW_HWNDPREV);
 if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
 for i:=0 to ListView2.Items.Count-1 do
 if s=ListView2.Items.Item[i].Caption then begin ist:=true; break; end;
 if (s<>"") and (ist=false) then begin ListView2.Items.Add;
 ListView2.Items.Item[ListView2.Items.Count-1].Caption:=s;
 end; end; Timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var pe32: PROCESSENTRY32;
   num,i: integer;
   hd: hwnd;
   str: array of string;
begin
//  ListView2.Items.Clear;
 hd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Process32First(hd,pe32); num:=0;
 while Process32Next(hd,pe32) do begin
 if ListView1.Items.Count=num then ListView1.Items.Add;
 ListView1.Items.Item[num].Caption:=pe32.szExeFile;
 ListView1.Items.Item[num].SubItems.Insert(0,IntToStr(pe32.pcPriClassBase));
 ListView1.Items.Item[num].SubItems.Insert(1,IntToStr(pe32.cntUsage));
 ListView1.Items.Item[num].SubItems.Insert(2,IntToStr(pe32.th32ProcessID));
 ListView1.Items.Item[num].SubItems.Insert(3,IntToStr(pe32.th32DefaultHeapID));
 ListView1.Items.Item[num].SubItems.Insert(4,IntToStr(pe32.cntThreads));
 ListView1.Items.Item[num].SubItems.Insert(5,IntToStr(pe32.th32ParentProcessID));
 ListView1.Items.Item[num].SubItems.Insert(6,IntToStr(pe32.th32ModuleID));
 Inc(num); end;
 if num<ListView1.Items.Count then while ListView1.Items.Count<>num do
 ListView1.Items.Item[ListView1.Items.Count-1].Delete;

{  num:=0; h:=Form1.Handle; h1:=h; no:=false;
 while no=false do begin h:=GetNextWindow(h,GW_HWNDNEXT);
 if h<>0 then begin GetWindowText(h,p,255); s:=StrPas(p);
 if s<>"" then begin SetLength(str,num+1); str[num]:=s; Inc(num); end; end
 else no:=true; end; h:=h1; no:=false;
 while no=false do begin h:=GetNextWindow(h,GW_HWNDPREV);
 if h<>0 then begin GetWindowText(h,p,255); s:=StrPas(p);
 {if s<>"" then begin SetLength(str,num+1); str[num]:=s; Inc(num); end; end
 else no:=true; end;

{  if Length(str)<ListView2.Items.Count then
 while ListView2.Items.Count<>Length(str) do
 ListView2.Items.Item[ListView2.Items.Count-1].Delete;
 for i:=0 to Length(str)-1 do begin
 if i<=ListView2.Items.Count-1 then ListView2.Items.Item[i].Caption:=str[i];
 if i>ListView2.Items.Count-1 then begin ListView2.Items.Add;
 ListView2.Items.Item[ListView2.Items.Count-1].Caption:=str[i]; end; end;
}end;

procedure StopProcess(ProcessID,ThreadID: dword);
var prochandle,thrdhandle: THandle;
   www: dword;
begin
 if DebugActiveProcess(ProcessID) then begin
 prochandle:=OpenProcess(PROCESS_ALL_ACCESS,true,ProcessID);
 if prochandle<>0 then
 if TerminateProcess(prochandle,www)<>false then
 showmessage("Process "+selecteditem.Caption+" is successfully terminated");
//  if TerminateThread(prochandle,www)<>false then showmessage("Terminated");
 CloseHandle(prochandle); end;
end;

to be continued...


 
lookin ©   (2005-07-03 12:43) [5]

procedure TForm1.Terminateprocess1Click(Sender: TObject);
var pe32: PROCESSENTRY32;
   te32: THREADENTRY32;
   num: integer;
   procID,thrdID,www: dword;
   ath: dword;
   hd: hwnd;
   find,findthread: boolean;
   procname: Ansistring;
   th: thandle;
   prochandle,thrdhandle: THandle;
   px: PChar;
   s: string;
begin
 Timer1.Enabled:=false;
 find:=false; findthread:=false;
 hd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Process32First(hd,pe32); num:=0;
 while (Process32Next(hd,pe32)) and (find=false) do begin
 procname:=pe32.szExeFile;
 if procname=selecteditem.Caption then begin
 prochandle:=OpenProcess(PROCESS_ALL_ACCESS,true,pe32.th32ProcessID);

{  if prochandle<>0 then begin
   px:=getcommandline();
 s:=StrPas(px); showmessage(s); end;
}

 procID:=pe32.th32ProcessID; Thread32First(hd,te32);
 while (Thread32Next(hd,te32)) and (findthread=false) do
 if te32.th32OwnerProcessID=procID then begin
 thrdID:=te32.th32ThreadID; findthread:=true; end;

 find:=true; end; num:=num+1; end;
 if find then StopProcess(procID,thrdID);
 Timer1.Enabled:=true;
end;

procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbRight then begin selecteditem:=ListView1.GetItemAt(X,Y);
 PopupMenu1.Popup(X+ListView1.ClientOrigin.x,Y+ListView1.ClientOrigin.y); end;
end;

procedure TForm1.Activateapplication1Click(Sender: TObject);
var tl: string;
begin
 tl:=selecteditem.Caption; h:=Form1.Handle; h1:=h; no:=false;
 while no=false do begin h:=GetNextWindow(h,GW_HWNDNEXT);
 if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
 if s=tl then begin ShowWindow(h,SW_RESTORE); SetForegroundWindow(h);
 RedrawWindow(h,0,0,RDW_VALIDATE and RDW_UPDATENOW and RDW_ALLCHILDREN);
 no:=true; break; end; end;
 if no=false then begin h:=h1;
 while no=false do begin h:=GetNextWindow(h,GW_HWNDPREV);
 if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
 if s=tl then begin ShowWindow(h,SW_RESTORE); SetForegroundWindow(h);
 RedrawWindow(h,0,0,RDW_VALIDATE and RDW_UPDATENOW and RDW_ALLCHILDREN);
 no:=true; break; end; end; end;
end;

procedure TForm1.ListView2MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbRight then begin
 selecteditem:=ListView2.GetItemAt(X,Y);
 PopupMenu2.Popup(X+ListView2.ClientOrigin.x,Y+ListView2.ClientOrigin.y); end;
end;

procedure TForm1.Closeapplication1Click(Sender: TObject);
var tl: string;
begin
 tl:=selecteditem.Caption; h:=Form1.Handle; h1:=h; no:=false;
 while no=false do begin h:=GetNextWindow(h,GW_HWNDNEXT);
 if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
 if s=tl then begin CloseWindow(h); no:=true; break; end; end;
 if no=false then begin h:=h1;
 while no=false do begin h:=GetNextWindow(h,GW_HWNDPREV);
 if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
 if s=tl then begin CloseWindow(h); no:=true; break; end; end; end;
end;

procedure SortWindow;
begin
//
end;

procedure TForm1.Gettext1Click(Sender: TObject);
var tl: string;
   hh: hWnd;
   px: PChar;
   m: MSG;
begin
 tl:=selecteditem.Caption;
 h:=Form1.Handle; h1:=h; no:=false;
 while no=false do begin h:=GetNextWindow(h,GW_HWNDNEXT);
 if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
 if s=tl then begin
 setforegroundwindow(h);
 simulatekeystroke(ord("A"),0);
 break; end; end;
 if no=false then begin h:=h1;
 while no=false do begin h:=GetNextWindow(h,GW_HWNDPREV);
 if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
 if s=tl then begin
 setforegroundwindow(h);
 simulatekeystroke(ord("A"),0);
 break; end; end; end;
end;

procedure SimulateKeystroke(Key : byte; extra : DWORD);
begin
 keybd_event(Key,extra,0,0);
 keybd_event(Key,extra,KEYEVENTF_KEYUP,0);
end;

end.


 
SpyBoy ©   (2005-07-03 12:46) [6]

Спасибо, а откуда взяли?


 
Игорь Шевченко ©   (2005-07-04 10:33) [7]

http://www.schevchenko.net.ru/SRC/QuerySystemInformation_60.zip



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

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

Наверх




Память: 0.5 MB
Время: 0.045 c
1-1122930722
Asteroid
2005-08-02 01:12
2005.08.21
Крыша едет с динмаическими массивами...


1-1122892701
vigo
2005-08-01 14:38
2005.08.21
Как определить кодировку?


4-1118906834
leonidus
2005-06-16 11:27
2005.08.21
Как получить слово выделенное в другом приложении


1-1123037753
iskatel
2005-08-03 06:55
2005.08.21
proxy


3-1121251687
AKiM
2005-07-13 14:48
2005.08.21
ввод даты в MySQL