加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

枚举Delphi中的运行进程

发布时间:2020-12-15 04:12:19 所属栏目:大数据 来源:网络整理
导读:如何使用Delphi在我的机器上获取正在运行的进程列表(包含PID,所有者等的详细信息)? 编辑:所提出的解决方案都没有给我拥有该进程的用户,只有PID,ExeName等信息…… 解决方法 一种方法是在 Windows NT上使用 Tool Help library(参见TlHelp32单元)或 EnumProc
如何使用Delphi在我的机器上获取正在运行的进程列表(包含PID,所有者等的详细信息)?

编辑:所提出的解决方案都没有给我拥有该进程的用户,只有PID,ExeName等信息……

解决方法

一种方法是在 Windows NT上使用 Tool Help library(参见TlHelp32单元)或 EnumProcesses(参见PsAPI单元).有关示例,请查看 JCL中的JclSysInfo.RunningProcessesList.

以下是如何获取进程用户名的快速示例:

type
  PTokenUser = ^TTokenUser;
  TTokenUser = packed record
    User: SID_AND_ATTRIBUTES;
  end;

function GetProcessUserName(ProcessID: Cardinal; out DomainName,UserName: string): Boolean;
var
  ProcessHandle,ProcessToken: THandle;
  InfoSize,UserNameSize,DomainNameSize: Cardinal;
  User: PTokenUser;
  Use: SID_NAME_USE;
  _DomainName,_UserName: array[0..255] of Char;
begin
  Result := False;
  DomainName := '';
  UserName := '';

  ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,ProcessID);
  if ProcessHandle = 0 then
    Exit;

  try
    if not OpenProcessToken(ProcessHandle,TOKEN_QUERY,ProcessToken) then
      Exit;

    try
      GetTokenInformation(ProcessToken,TokenUser,nil,InfoSize);
      User := AllocMem(InfoSize * 2);
      try
        if GetTokenInformation(ProcessToken,User,InfoSize * 2,InfoSize) then
        begin
          DomainNameSize := SizeOf(_DomainName);
          UserNameSize := SizeOf(_UserName);

          Result := LookupAccountSid(nil,User^.User.Sid,_UserName,_DomainName,DomainNameSize,Use);

          if Result then
          begin
            SetString(DomainName,StrLen(_DomainName));
            SetString(UserName,StrLen(_UserName));
          end;
        end;
      finally
        FreeMem(User);
      end;
    finally
      CloseHandle(ProcessToken);
    end;
  finally
    CloseHandle(ProcessHandle);
  end;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读