プロセスを列挙する

ここではListBoxにプロセスのファイル名を列挙します。
有益なサンプルではあるのですが、「必要に迫られる」ことはあまりないかも知れません。 尚、Windows NTでは動作しません。



■使用するコンポーネント

■使用するAPI関数

■ソースは下記のようになります。

API・構造体・定数の定義
//PROCESSENTRY32構造体
type
PPROCESSENTRY32=^TPROCESSENTRY32;
TPROCESSENTRY32= record
  dwSize        : integer; //構造体サイズ
  cntUsage       : integer; //参照カウント
  th32ProcessID    : integer; //プロセスID
  th32DefaultHeapID  : integer; //デフォルトのヒープID
  th32ModuleID     : integer; //モジュールID
  cntThreads      : integer; //スレッドカウント
  th32ParentProcessID : integer; //親プロセスID
  pcPriClassBase    : integer; //基本優先レベル
  dwFlags        : integer; //フラグ(未使用)
  szExeFile       : array [0..MAX_PATH] of char; //ファイル名
end;

//プロセスのスナップショトを取得するAPI
function CreateToolhelp32Snapshot (dwFlag,th32ProcessID : integer) :integer;stdcall;external 'Kernel32.dll';

//最初のプロセスを取得するAPI
function Process32First(hSnapshot :integer; lppe : PPROCESSENTRY32):integer ;stdcall;external 'Kernel32.dll';

//2番目以降のプロセスを取得するAPI
function Process32Next(hSnapshot :integer ; lppe : PPROCESSENTRY32):integer ;stdcall;external 'Kernel32.dll';

Const
TH32CS_INHERIT = $80000000;
TH32CS_SNAPHEAPLIST = $1;
TH32CS_SNAPPROCESS = $2 ;
TH32CS_SNAPTHREAD = $4 ;
TH32CS_SNAPMODULE = $8 ;
TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or     TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE;


プロセスを列挙する処理
procedure TForm1.Button1Click(Sender: TObject);
Var
hProcesss : integer;
P32 : TPROCESSENTRY32 ;
begin

  hProcesss := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  P32.dwSize := Sizeof(TPROCESSENTRY32);

   If Process32First(hProcesss, @P32) <> 0 Then
   begin
      repeat
        ListBox1.Items.ADD(P32.szExeFile);
      Until(Process32Next(hProcesss, @P32) = 0);
  end;

   CloseHandle(hProcesss) ;

end;




Win32APIのページへ



ホーム PV ランキング