五维思考

学习要加,骄傲要减,机会要乘,懒惰要除。 http://www.5dthink.cn

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1. unit Unit1;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, TLHelp32, psapi;
  6. type
  7.   TForm1 = class(TForm)
  8.     Button1: TButton;
  9.     ListBox1: TListBox;
  10.     procedure Button1Click(Sender: TObject);
  11.   private
  12.     function GetProcessPath(ProcessID: DWORD): string;
  13.   public
  14.     { Public declarations }
  15.   end;
  16. var
  17.   Form1: TForm1;
  18. implementation
  19. {$R *.dfm}
  20. //------------------------------------------------------------------------------
  21. // 通过进程ID获得进程路径
  22. //------------------------------------------------------------------------------
  23. function TForm1.GetProcessPath(ProcessID: DWORD): string;
  24. var
  25.   Hand: THandle;
  26.   ModName: array[0..Max_Path - 1of Char;
  27.   hMod: HModule;
  28.   n: DWORD;
  29. begin
  30.   Result := '';
  31.   Hand := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessID);
  32.   if Hand > 0 then
  33.   try
  34.     ENumProcessModules(Hand, @hMod, Sizeof(hMod), n);
  35.     if GetModuleFileNameEx(Hand, hMod, ModName, Sizeof(ModName)) > 0 then
  36.       Result := ExtractFilePath(ModName);
  37.   except
  38.   end;
  39. end;
  40. procedure TForm1.Button1Click(Sender: TObject);
  41. var
  42.   ProcessName: string//进程名
  43.   ProcessID: integer//进程表示符
  44.   i: integer;
  45.   ContinueLoop: BOOL;
  46.   FSnapshotHandle: THandle; //进程快照句柄
  47.   FProcessEntry32: TProcessEntry32; //进程入口的结构体信息
  48. begin
  49.   FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //创建一个进程快照
  50.   FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  51.   ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); //得到系统中第一个进程
  52. //循环例举
  53.   while ContinueLoop do
  54.   begin
  55.     ProcessName := FProcessEntry32.szExeFile;
  56.     ProcessID := FProcessEntry32.th32ProcessID;
  57.     Listbox1.Items.add('应用程序名:' + ProcessName + '#进程ID:' + inttostr(ProcessID) + '路径:' + GetProcessPath(ProcessID));
  58.     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  59.   end;
  60. end;
  61. end.
posted on 2008-10-08 20:19  五维思考  阅读(385)  评论(0编辑  收藏  举报

QQ群:1. 全栈码农【346906288】2. VBA/VSTO【2660245】