获取进程列表、名称、路径
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, TLHelp32, psapi;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- ListBox1: TListBox;
- procedure Button1Click(Sender: TObject);
- private
- function GetProcessPath(ProcessID: DWORD): string;
- public
-
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- function TForm1.GetProcessPath(ProcessID: DWORD): string;
- var
- Hand: THandle;
- ModName: array[0..Max_Path - 1] of Char;
- hMod: HModule;
- n: DWORD;
- begin
- Result := '';
- Hand := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessID);
- if Hand > 0 then
- try
- ENumProcessModules(Hand, @hMod, Sizeof(hMod), n);
- if GetModuleFileNameEx(Hand, hMod, ModName, Sizeof(ModName)) > 0 then
- Result := ExtractFilePath(ModName);
- except
- end;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- var
- ProcessName: string;
- ProcessID: integer;
- i: integer;
- ContinueLoop: BOOL;
- FSnapshotHandle: THandle;
- FProcessEntry32: TProcessEntry32;
- begin
- FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
- ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
- while ContinueLoop do
- begin
- ProcessName := FProcessEntry32.szExeFile;
- ProcessID := FProcessEntry32.th32ProcessID;
- Listbox1.Items.add('应用程序名:' + ProcessName + '#进程ID:' + inttostr(ProcessID) + '路径:' + GetProcessPath(ProcessID));
- ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
- end;
- end;
- end.
原文地址:https://www.cnblogs.com/zhaoshujie/p/9594822.html