我想创建一个显示此信息的任务管理器程序: 图像名称 内存使用情况 PID 我怎样才能做到这一点? 因此,您不需要J(WS)CL,只需要一个简单的WinAPI调用即可完成所有操作,这就是CreateToolhe
>图像名称
>内存使用情况
> 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调用此函数.
