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

Вниз

Процесы в Windows ..   Найти похожие ветки 

 
Chlavik ©   (2004-12-05 20:15) [0]

Как получить список процесов в Windows. Есть что то типа EnumProcesses ??


 
Xaker ©   (2004-12-05 20:19) [1]

Chlavik ©   (05.12.04 20:15)
есть


 
novice__man   (2004-12-05 20:20) [2]

Что то вроде этого:

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;


 
Chlavik ©   (2004-12-05 20:24) [3]

Ты что потерялись ??? Причём тут окна (слышал про EnumWindows?).


 
Xaker ©   (2004-12-05 20:24) [4]

комплексная прога исследования процессов

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   CheckBox1: TCheckBox;
   Button4: TButton;
   CheckBox2: TCheckBox;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button4Click(Sender: TObject);
   procedure FormClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
Uses  PSAPI, TlHelp32;

type

TUnicodeString = packed record
  Length, MaximumLength: Word;
  Buffer: PWideChar;
end;

PSystemProcessInformation = ^TSystemProcessInformation;
TSystemProcessInformation = packed record
  dNext: DWord;
  dThreadCount: DWord;
  dReserved01, dReserved02, dReserved03, dReserved04, dReserved05, dReserved06: DWord;
  qCreateTime, qUserTime, qKernelTime: Int64;
  usName: TUnicodeString;
  BasePriority: DWord;
  dUniqueProcessId: DWord;
  dInheritedFromUniqueProcessId: DWord;
  dHandleCount: DWord;
  dReserved07: DWord;
  dReserved08: DWord;
  VmCounters: array[0..10] of DWord;
  dCommitCharge: DWord;
end;

function NtQuerySystemInformation(sic: DWord; Buffer: Pointer; BufSize: DWord; var BytesReturned: DWord): DWord; stdcall; external "ntdll.dll";

Var Th:boolean;

procedure GetProcessList(var sl:TStrings);
var
 pe:TProcessEntry32;
 ph, snap:THandle;//дескрипторы процесса и снимка
 mh:hmodule;//дескриптор модуля
 procs:array[0..$fff] of dword;//массив для хранения дескрипторов процессов
 count, cm:cardinal;//количество процессов
 i:integer;
 ModName:array[0..max_path] of char;//имя модуля
begin
 sl.Clear;
 if not th {Win32Platform = VER_PLATFORM_WIN32_WINDOWS} then begin //если это Win9x
   snap:=CreateToolhelp32Snapshot(th32cs_snapprocess, 0);
   if integer(snap)=-1 then
   begin
     exit;
   end else
   begin
     pe.dwSize:=sizeof(pe);
     if Process32First(snap, pe) then
     repeat

   if Form1.CheckBox2.Checked then
Begin

ph:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,                      false,pe.th32ProcessID);
     if ph>0 then
     begin
       EnumProcessModules(ph, @mh, 4, cm);
       GetModuleFileNameEx(ph, mh, ModName, sizeof(ModName));
       if form1.CheckBox1.Checked then  sl.Add(ExtractFileName(string(ModName)))
                       else              sl.Add(string(ModName));
       CloseHandle(ph);
     end;
End

else   Begin    sl.Add(string(pe.szExeFile));     End;

     until not Process32Next(snap, pe);
   end;
 end
 else
 begin //Если WinNT/2000/XP
   if not EnumProcesses(@procs, sizeof(procs), count) then
   begin
     exit;
   end;
   for i := 0 to count div 4 - 1 do
   begin
     ph:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
                     false, procs[i]);
     if ph>0 then
     begin
       EnumProcessModules(ph, @mh, 4, cm);
       GetModuleFileNameEx(ph, mh, ModName, sizeof(ModName));
       if form1.CheckBox1.Checked then  sl.Add(ExtractFileName(string(ModName)))
                       else              sl.Add(string(ModName));
       CloseHandle(ph);
     end;
   end;
 end;
end;

function FindProcess: DWord;
var
p, Buf: PSystemProcessInformation;
BufSize: DWord;
TableSize: DWord;
begin
Form1.Memo1.Clear;
Result := 0;
BufSize := $10000;
GetMem(Buf, BufSize);
while NtQuerySystemInformation(5, Buf, BufSize, TableSize) <> 0 do
  begin
    Inc(BufSize, $10000);
    ReallocMem(Buf, BufSize);
  end;
p := Buf;
while True do
  begin
    {if CompareText(Buf.usName.Buffer, ProcessName) = 0 then
      begin
        Result := Buf.dUniqueProcessId;
        break;
      end; }
    Form1.Memo1.Lines.Add(Buf.usName.Buffer);
    if Buf.dNext = 0 then Break;
    Inc(Integer(Buf), Buf.dNext);
  end;
FreeMem(p);
end;

procedure TForm1.Button1Click(Sender: TObject);
var tmp: TStrings;
begin
 Th:=True;
 tmp:=Memo1.Lines;
 GetProcessList(tmp);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
FindProcess;
end;

procedure TForm1.Button3Click(Sender: TObject);
var tmp: TStrings;
begin
 Th:=False;
 tmp:=Memo1.Lines;
 GetProcessList(tmp);
end;

function SetDebugPriv:Boolean;
var
Token: THandle;
tkp: TTokenPrivileges;
begin
Result := false;
if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
begin
 if LookupPrivilegeValue(nil, PChar("SeDebugPrivilege"), tkp.Privileges[0].Luid) then
 begin
   tkp.PrivilegeCount := 1;
   tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   Result := AdjustTokenPrivileges(Token, false, tkp, 0, PTokenPrivileges(nil)^, PDWord(nil)^);
 end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetDebugPriv;
end;

{uses tlHelp32;

function GetFilePath(const WinH: THandle): String;
var
SnapshotH: THandle;
PE32: TProcessEntry32;
PrId: Cardinal;
begin

Result := "";
SnapshotH := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if SnapshotH = -1 then Exit;
PE32.dwSize := SizeOf(PE32);
GetWindowThreadProcessID(WinH, PrId);
if Process32First(SnapshotH, PE32) then
repeat
if PE32.th32ProcessID = PrId then begin
 Result := PE32.szExeFile;
 Break;
end;
until not Process32Next(SnapshotH, PE32);
CloseHandle(SnapshotH)

end;

c:\DELPHI\Delphi_info\Delphi_download\html faq\102!!!!!!!!!!!!!!1.htm
}

procedure TForm1.Button4Click(Sender: TObject);

procedure SortDate(L, R: Integer);
var i,j,p: Integer;  temp: String;
begin
  repeat
    I:= L;  J:=R; P:=(L+R)shr 1;
    repeat
      while(memo1.Lines[I]<memo1.Lines[P])do Inc(I);


 
Xaker ©   (2004-12-05 20:24) [5]

      while(memo1.Lines[J]>memo1.Lines[P])do Dec(J);
      if I<=J then begin
        temp:=memo1.Lines[I];
        memo1.Lines[I]:=memo1.Lines[J];
        memo1.Lines[J]:=temp;
        if P=I then P:=J else if P=J then P:=I; Inc(I); Dec(J);
      end;
    until I>J;
    if L<J then SortDate(L,J); L:=I;
  until I>=R;
end;

begin
SortDate(0,Memo1.Lines.Count-1);
end;

procedure TForm1.FormClick(Sender: TObject);
begin
Caption:=IntToStr(Memo1.Lines.count);
end;

End.


 
Xaker ©   (2004-12-05 20:25) [6]

прикольно MF разделил ...   Респект Piter"у


 
Chlavik ©   (2004-12-05 20:27) [7]

Слушай дай уже тады проэкт dj_speedbeat@mail.ru


 
novice__man   (2004-12-05 20:29) [8]

Шлавик а вы хамло.


 
Chlavik ©   (2004-12-05 20:33) [9]

Больше не буду .. Не вижу связи с вашим ответом и омим вопросом ...


 
novice__man   (2004-12-05 20:36) [10]

Сходи на сайт там есть пример, я сейчас проверил.
http://www.delphiworld.narod.ru/

Раздел: процессы и сервисы.
"Как получить хэндлы всех пpоцессов, котоpые запущены на данный момент в системе  
--------------------------------------------------------------------------------

Под Windows 95 это возможно с использованием вспомогательных инфоpмационных функций (tool help functions). Для получения списка пpоцессов надо делать следующее: .....

"


 
Chlavik ©   (2004-12-05 20:49) [11]

Да вот этот пример уже хорошо пашет ...  Process32First - то что мне надо было это и есть tool Help функция ...А у меня стоит XP так что всё ok. Thank"s ...



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

Форум: "WinAPI";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.057 c
14-1104585656
Чеширский_Кот
2005-01-01 16:20
2005.01.23
1 января - самое время ФУТБОЛА!


14-1104908231
olookin
2005-01-05 09:57
2005.01.23
Оказывается, кто-то мог не дожить до Нового года...


14-1104668297
VID
2005-01-02 15:18
2005.01.23
Разыскивается песенка!


4-1101905484
Stefan
2004-12-01 15:51
2005.01.23
Ошибка RegisterServiceProcess в NT-подобных системах


1-1105350232
Nexel
2005-01-10 12:43
2005.01.23
Мерцатель млин...





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