解决方法
一种方法是在
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;
原文地址:https://www.jb51.cc/delphi/102016.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。