Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить список всех доступных процессов? / 3 сообщений из 3, страница 1 из 1
04.05.2003, 18:11
    #32152896
Fox_19
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список всех доступных процессов?
Привет! Тут возникла проблема, необходимо вывести список всех процессов, например в ListBox. Подскажите как это реализовать. Если можно небольшой примерчик. )
...
Рейтинг: 0 / 0
04.05.2003, 18:59
    #32152906
Serge S..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список всех доступных процессов?
Примеров не будет, Обращаться к MSDN!
См. EnumProcesses по Win NT,
Process32First, Process32Next под Win9x и начиная с Win2000
...
Рейтинг: 0 / 0
05.05.2003, 08:25
    #32152976
LexusR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список всех доступных процессов?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
unit ProcessInfo;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes,
  Graphics, Controls, Forms,Dialogs, StdCtrls, tlhelp32;
Type
  TThreadInfo = Record
    ftCreationTime: TFileTime;
    dwUnknown1: DWORD;
    dwStartAddress: DWORD;
    dwOwningPID: DWORD;
    dwThreadID: DWORD;
    dwCurrentPriority: DWORD;
    dwBasePriority: DWORD;
    dwContextSwitches: DWORD;
    dwThreadState: DWORD;
    dwUnknown2: DWORD;
    dwUnknown3: DWORD;
    dwUnknown4: DWORD;
    dwUnknown5: DWORD;
    dwUnknown6: DWORD;
    dwUnknown7: DWORD;
  End;
  TProcessInfo = Record
    dwOffset: DWORD;
    dwThreadCount: DWORD;
    dwUnkown1: Array[ 0 .. 5 ] Of DWORD;
    ftCreationTime: TFileTime;
    dwUnkown2: DWORD;
    dwUnkown3: DWORD;
    dwUnkown4: DWORD;
    dwUnkown5: DWORD;
    dwUnkown6: DWORD;
    pszProcessName: pwideChar;
    dwBasePriority: DWORD;
    dwProcessID: DWORD;
    dwParentProcessID: DWORD;
    dwHandleCount: DWORD;
    dwUnkown7: DWORD;
    dwUnkown8: DWORD;
    dwVirtualBytesPeak: DWORD;
    dwVirtualBytes: DWORD;
    dwPageFaults: DWORD;
    dwWorkingSetPeak: DWORD;
    dwWorkingSet: DWORD;
    dwUnkown9: DWORD;
    dwPagedPool: DWORD;
    dwUnkown10: DWORD;
    dwNonPagedPool: DWORD;
    dwPageFileBytesPeak: DWORD;
    dwPageFileBytes: DWORD;
    dwPrivateBytes: DWORD;
    dwUnkown11: DWORD;
    dwUnkown12: DWORD;
    dwUnkown13: DWORD;
    dwUnkown14: DWORD;
    ati: Array[ 0 .. 0 ] Of TThreadInfo;
  End;
Type
  PProcessInfo = ^TProcessInfo;
  PThreadInfo = ^TThreadInfo;
Type
  tFuncNtQsI = Function(a: Longint; Buffer: Pointer; SizeBuffer: Longint; Tmp:
    Longint): Longint; stdcall;
type
  TForm1 = class(TForm)
    ProcessList: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var
  pInfo: PProcessInfo;
  buf: Array[ 0 .. 20479 ] Of Char;
  h: THandle;
  ff: tFuncNtQsI;
  ss: pchar;
  i, k: Integer;
Begin
  If Win32Platform = VER_PLATFORM_WIN32_NT Then
  Begin
    ProcessList.Lines.Clear;
    h := LoadLibrary('NTDLL.DLL');
    If h >  0  Then
    Begin
      @ff := GetProcAddress(h, 'NtQuerySystemInformation');
      If @ff <> Nil Then
      Begin
        ff( 5 , @buf,  20480 ,  0 );
        pInfo := @buf;
        Repeat
          Try
            If pInfo^.pszProcessName <> Nil Then
              ProcessList.Lines.Add(WideCharToString(pInfo^.pszProcessName));
            pInfo := Ptr(Integer(pInfo) + pInfo^.dwOffset);
          Except
            break;
          End;
        Until pInfo^.dwOffset =  0 ;
      End;
      FreeLibrary(h);
    End;
  End;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  han : THandle;
  ProcStruct : PROCESSENTRY32; // from  "tlhelp32"  in uses clause
  sID : string;
begin
  ProcessList.Lines.Clear;
  han := CreateToolhelp32Snapshot( TH32CS_SNAPALL,  0  );
  if han =  0  then
    exit;
  ProcStruct.dwSize := sizeof( PROCESSENTRY32 );
  if Process32First( han, ProcStruct ) then
    begin
      repeat
        sID := ExtractFileName( ProcStruct.szExeFile );
        ProcessList.Lines.Add(sId);
      until not Process32Next( han, ProcStruct );
    end;
  CloseHandle( han );
end;

end.

...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить список всех доступных процессов? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]