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

如何使用Delphi获取其他进程的信息?

发布时间:2020-12-15 09:09:07 所属栏目:大数据 来源:网络整理
导读:我想创建一个显示此信息的任务管理器程序: 图像名称 内存使用情况 PID 我怎样才能做到这一点? 解决方法 因此,您不需要J(WS)CL,只需要一个简单的WinAPI调用即可完成所有操作,这就是CreateToolhelp32Snapshot.要获取所有正在运行的进程的快照,您必须按如下方
我想创建一个显示此信息的任务管理器程序:

>图像名称
>内存使用情况
> PID

我怎样才能做到这一点?

解决方法

因此,您不需要J(WS)CL,只需要一个简单的WinAPI调用即可完成所有操作,这就是CreateToolhelp32Snapshot.要获取所有正在运行的进程的快照,您必须按如下方式调用它:

var
  snapshot: THandle;
begin
  snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

现在您有一个所有正在运行的进程的列表.您可以使用Process32First和Process32Next函数在此列表中导航,列表条目是PROCESSENTRY32-structures(其中包含进程ID和映像名称).

uses 
  Windows,TLHelp32,SysUtils; 

var 
  snapshot: THandle; 
  ProcEntry: TProcessEntry32; 
  s: String; 
begin
  snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
  if (snapshot <> INVALID_HANDLE_VALUE) then begin 
    ProcEntry.dwSize := SizeOf(ProcessEntry32); 
    if (Process32First(snapshot,ProcEntry)) then begin 
      s := ProcEntry.szExeFile; 
      // s contains image name of the first process 
      while Process32Next(snapshot,ProcEntry) do begin 
        s := ProcEntry.szExeFile; 
        // s contains image name of the current process 
      end; 
    end; 
  end; 
  CloseHandle(snapshot);

但是,似乎并未包含内存消耗信息,但您可以通过另一个简单的API调用GetProcessMemoryInfo来获取此信息.

uses
  psAPI;

var
  pmc: TProcessMemoryCounters;
begin
  pmc.cb := SizeOf(pmc) ;
  if GetProcessMemoryInfo(processID,@pmc,SizeOf(pmc)) then
    // Usage in Bytes: pmc.WorkingSetSize
  else
    // fail

您只需使用从快照检索的进程ID调用此函数.

(编辑:李大同)

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

    推荐文章
      热点阅读