获取进程路径

uses Tlhelp32, PsAPI;
var
  ProcArr: array of TProcessEntry32;
  ColumnToSort: Integer;

procedure EnumProcess(pNameList, PidList: TStrings);
var
  hProcess: THandle;
  Find: Boolean;
  Proc: TProcessEntry32;
  i: DWORD;
begin
  try
    hProcess := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    Proc.dwSize := SizeOf(Proc);
    Find := Process32First(hProcess, Proc);
    i := 0;
    while Find do
    begin
      SetLength(ProcArr, i + 1);
      ProcArr[i] := Proc;
      inc(i);
      pNameList.Add(Proc.szExeFile);
      PidList.Add(inttostr(Proc.th32ProcessID));
      Find := Process32Next(hProcess, Proc);
    end;
  finally
    CloseHandle(hProcess);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  PnList, PidList: TStringList;
  i, d, lpc: DWORD;
  hProc: THandle;
  hModu: HMODULE;
  cb: Cardinal;
  exeName: array[0..MAX_PATH] of Char;
  item: TListItem;
begin
  lv1.Clear;
  try
    d := 1;
    PnList := TStringList.Create;
    PidList := TStringList.Create;
    PnList.Clear;
    PidList.Clear;
    EnumProcess(PnList, PidList);
    for i := Low(ProcArr) to High(ProcArr) do
    begin
      Item := lv1.Items.Add;
      item.Caption := IntToStr(d);
      item.SubItems.Add(ProcArr[i].szExeFile);
      item.SubItems.Add(IntToStr(ProcArr[i].th32ProcessID));
      hProc := OpenProcess(PROCESS_QUERY_INFORMATION
        or PROCESS_VM_READ, False, ProcArr[i].th32ProcessID);
      if hProc > 0 then
      begin
        EnumProcessModules(hProc, @hModu, SizeOf(hModu), Lpc);
        if GetModuleFileNameEx(hProc, hModu, exeName, SizeOf(exeName)) > 0 then
          item.SubItems.Add(ExtractFileDir(exeName) + exeName);
      end;
      inc(D);
    end;
    stat1.Panels[0].Text := Format('当前系统共有 %D 个进程', [D - 1]);
  finally
    FreeAndNil(PnList);
    FreeAndNil(PidList);
    CloseHandle(Hproc);
  end;
end;

procedure TForm1.lv1ColumnClick(Sender: TObject; Column: TListColumn);       //排序
begin
  ColumnToSort := Column.Index;
  (Sender as TCustomListView).AlphaSort;
end;

procedure TForm1.lv1Compare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
var
  ix: Integer;
begin
  try
    if ColumnToSort = 0 then
      Compare := CompareText(Item1.Caption, Item2.Caption)                  //排序
    else
    begin
      ix := ColumnToSort - 1;
      Compare := CompareText(Item1.SubItems[ix], Item2.SubItems[ix]);
    end;
  except
    //Beep;
    //Exit;
  end;
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值