a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Delphi > 正文

Delphi實現獲取進程列表及相關信息的實例

2020-01-31 20:50:10
字體:
來源:轉載
供稿:網友

Delphi實現獲取進程列表及相關信息的實例

前言:

閑著沒事,看著任務管理器好玩,查資料先簡單實現一下,代碼中沒有加入獲取CPU占用率的代碼,這個代碼網上很多,只是不喜歡那種寫法,這里就不寫了。以后繼續完善,對于System Process和System的信息還沒法獲得,那位兄弟知道可以提個醒。

 代碼如下

unit Main;  interface  uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs,TlHelp32, StdCtrls, ComCtrls,psAPI;  type  PTokenUser  =  ^TTokenUser;  _TOKEN_USER  =  record  User:  TSIDAndAttributes;  end;  TTokenUser  =  _TOKEN_USER;    TForm1 = class(TForm)   btn_Get: TButton;   Lv_Process: TListView;   procedure btn_GetClick(Sender: TObject);   procedure FormCreate(Sender: TObject);  private   { Private declarations }   function GetMemUsedText(memsize:Cardinal):string;   function GetProcessPriority(priority:Cardinal):string;   function GetCupUsedPercent(hprocess:THandle):string;   function GetProcessUser(hprocess:THandle):string;  public   { Public declarations }  end;  var  Form1: TForm1;  implementation  {$R *.dfm}  { 作用:提權到Debug,為了在Vista和Win7下讀取系統信息,運行時需要以管理員身份運行 } function PromoteProcessPrivilege(Processhandle:Thandle;Token_Name:pchar):boolean; var   Token:cardinal;   TokenPri:_TOKEN_PRIVILEGES;   Luid:int64;   i:DWORD; begin   Result:=false;   //打開令牌   if OpenProcessToken(Processhandle,TOKEN_ADJUST_PRIVILEGES,Token) then   begin    //看系統權限的特權值     if LookupPrivilegeValue(nil,Token_Name,Luid) then     begin       TokenPri.PrivilegeCount:=1;       TokenPri.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;       TokenPri.Privileges[0].Luid:=Luid;       i:=0;       //提權       if AdjustTokenPrivileges(Token,false,TokenPri,sizeof(TokenPri),nil,i) then         Result:=true;     end;   end;   CloseHandle(Token); end;  function AddFileTimes(KernelTime, UserTime: TFileTime): TDateTime; var  SysTimeK, SysTimeU: TSystemTime; begin  FileTimeToSystemTime(KernelTime, SysTimeK);  FileTimeToSystemTime(UserTime, SysTimeU);  Result :=SystemTimeToDateTime(SysTimeK)+SystemTimeToDateTime(SysTimeU); end;  //獲取CPU時間 function GetProcCPUTime(procID:THandle): TDateTime; var  CreationTime, ExitTime, KernelTime, UserTime: TFileTime; begin  GetProcessTimes(procID, CreationTime, ExitTime, KernelTime,UserTime);  Result := AddFileTimes(KernelTime, UserTime); end;  procedure TForm1.btn_GetClick(Sender: TObject); var  hSnapShot,hProcess,hModel:THandle;  pEntry:TProcessEntry32;  find:Boolean;  item:TListItem;  //內存信息  pPMC:PPROCESS_MEMORY_COUNTERS;  pPMCSize,ProcessPriority:Cardinal;  n:DWORD;  fName:array [0..MAX_PATH-1] of char; begin  //創建進程快照  hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  pEntry.dwSize := SizeOf(pEntry);  //第一個進程  find := Process32First(hSnapShot,pEntry);  while find do  begin   item := Lv_Process.Items.Add;   //進程名   item.Caption := pEntry.szExeFile;   //進程ID   item.SubItems.Add(IntToStr(pEntry.th32ProcessID));   pPMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);   GetMem(pPMC,pPMCSize);   pPMC.cb := pPMCSize;   //打開進程,增加PROCESS_VM_READ權限,以便后面獲取完整路徑時使用   hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,pEntry.th32ProcessID);   //獲取內存信息   if GetProcessMemoryInfo(hProcess,pPMC,pPMCSize) then   begin    //取得進程的用戶    item.SubItems.Add(GetProcessUser(hProcess));    //內存使用    item.SubItems.Add(GetMemUsedText(pPMC.WorkingSetSize));    //內存峰值    item.SubItems.Add(GetMemUsedText(pPMC.PeakWorkingSetSize));    //CPU時間    item.SubItems.Add(FormatDateTime('hh:mm:ss',GetProcCPUTime(hProcess)));    //獲取優先級    ProcessPriority := GetPriorityClass(hProcess);    item.SubItems.Add(GetProcessPriority(ProcessPriority));    //根據進程句柄找到模塊句柄    ENumProcessModules(hProcess,@hModel,SizeOf(hModel),n);    //取得完整路徑    GetModuleFileNameEx(hProcess,hModel,fName,Length(fName));    item.SubItems.Add(fName);   end;   FreeMem(pPMC);   CloseHandle(hProcess);   find := Process32Next(hSnapShot,pEntry);  end; end;  function TForm1.GetCupUsedPercent(hprocess: THandle): string; begin end;  function TForm1.GetMemUsedText(memsize: Cardinal): string; begin  Result := IntToStr(memsize div 1024) + ' K'; end;  function TForm1.GetProcessPriority(priority: Cardinal): string; begin  case priority of   IDLE_PRIORITY_CLASS: Result := '低';   NORMAL_PRIORITY_CLASS: Result := '普通';   HIGH_PRIORITY_CLASS: Result := '高';   REALTIME_PRIORITY_CLASS: Result := '實時';  end; end;  //獲取進程的所屬用戶 function TForm1.GetProcessUser(hprocess: THandle): string; var  hToken:THandle;  dwSize,dwUserSize,dwDomainSize:DWORD;  pUser:PTokenUser;  szUserName, szDomainName: array of Char;  peUse:  SID_NAME_USE; begin  //打開權限  if not OpenProcessToken(hprocess,TOKEN_QUERY,hToken) then Exit;  //獲取令牌信息,這里第三個參數使用了nil,是先返回實際大小dwSize,然后根據這個大小去分配內存  GetTokenInformation(hToken,TokenUser,nil,0,dwSize);  pUser := nil;  //分配空間  ReallocMem(pUser,dwSize);  dwUserSize := 0;  dwDomainSize := 0;  //獲取信息  if not GetTokenInformation(hToken,TokenUser,pUser,dwSize,dwSize) then Exit;  //查找用戶信息,先返回用戶名和域名的大小,當然你也可以一次性得到,即不使用動態數組  LookupAccountSid(nil,pUser.User.Sid,nil,dwUserSize,nil,dwDomainSize,peUse);  if (dwUserSize <> 0) and (dwDomainSize <> 0) then  begin   //分配長度   SetLength(szUserName,dwUserSize);   SetLength(szDomainName,dwDomainSize);   //再次,獲取用戶名和域名   LookupAccountSid(nil,pUser.User.Sid,PChar(szUserName),dwUserSize,PChar(szDomainName),dwDomainSize,peUse);  end;  Result := PChar(szUserName)+'/'+PChar(szDomainName);  CloseHandle(hToken);  FreeMem(pUser); end;  procedure TForm1.FormCreate(Sender: TObject); begin  PromoteProcessPrivilege(GetCurrentProcess,'SeDebugPrivilege'); end;  end. 

 運行圖片

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 国产精品二区一区二区aⅴ污介绍 | 久久精品久久久久电影 | 久久亚洲精品国产亚洲老地址 | 成人午夜视频在线观看 | 青青草人人 | 久草热久草在线 | 亚洲精品二区 | 91精品一区二区三区久久久久久 | 精品三级 | 国产美女精品人人做人人爽 | 91精品久久久久久久久久 | 久久久久久久久综合 | 九九热在线免费观看 | 久久久蜜桃 | 99av| 国产激情毛片 | 91偷拍精品一区二区三区 | 99re国产 | 亚洲tv久久爽久久爽 | 激情91| 久久久久久久久久久久影院 | 日韩大片免费看 | 国产美女精品视频免费观看 | 久久久久久久久久久久福利 | www.huangse | 久久综合久色欧美综合狠狠 | 中文在线一区二区 | 久久精品这里热有精品 | 四虎成人在线播放 | 在线小视频| 高清国产视频 | 久久99精品国产麻豆婷婷洗澡 | 欧美日韩一区二区视频在线观看 | 免费在线亚洲 | 中国一级毛片免费 | 精品国产欧美一区二区三区成人 | 噜噜噜噜狠狠狠7777视频 | 在线观看免费av网 | 午夜视频在线观看网站 | 欧美freesex交免费视频 | 日韩在线免费观看av |