回答
在Jwscl还有一类,可以为你做这个(JwsclTerminalServer):
var
ATerminalServer: TJwTerminalServer;
i: Integer;
begin
// Create Terminal Server instance and allocate memory for it
ATerminalServer := TjwTerminalServer.Create;
// Set servername (only in case of remote server)
ATerminalServer.Server := 'TS001';
// Remember that EnumerateProcesses will automatically connect to the
// Terminal Server for you. The connect function raises an Exception
// if the connection attempt was unsuccessfull, so better use try..except
try
if ATerminalServer.EnumerateProcesses then
begin
// Now loop through the list
for i := 0 to ATerminalServer.Processes.Count - 1 do
begin
Memo1.Lines.Add(ATerminalServer.Processes[i].ProcessName);
end;
end;
except
on E: EJwsclWinCallFailedException do
begin
// Handle Exception here
end;
end;
// Free Memory
ATerminalServer.Free;
end;
虽然单元是针对终端服务器这部分工作既没有和作为奖励,您也可以在远程系统上使用它。
对于每个过程都会返回详细信息,请查看文档以了解详细信息。
对于内存的使用情况,您可以使用ProcessMemUsage和ProcessVirtualSize性质,对于PID存在的ProcessID属性
你不需要歼(WS)CL因此,有一个简单的WinAPI的调用,它几乎所有你想要的,这是CreateToolhelp32Snapshot
。为了让所有正在运行的进程的快照,你必须调用它,如下所示:
var
snapshot: THandle;
begin
snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
现在你有所有正在运行的进程的列表。您可以使用Process32First
和Process32Next
函数浏览此列表,列表条目是PROCESSENTRY32
-结构(其中包含进程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这个功能从快照中检索。
ProcessInfo提供有关在Windows中运行进程的基本信息。它是开源的,包含一个任务管理器的演示。
您可以使用WMI Win32_Process类来获取所有正在运行的进程信息。除此之外,您可以检查Win32_PerfFormattedData_PerfProc_Process类以获取与CPU和内存使用情况相关的性能计数器。
检查该样本
program WMIProcessInfo;
{$APPTYPE CONSOLE}
uses
SysUtils
,ActiveX
,ComObj
,Variants;
procedure GetWin32_Process;
var
objWMIService : OLEVariant;
colItems : OLEVariant;
colItem : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
User : OLEVariant;
Domain : OLEVariant;
function GetWMIObject(const objectName: String): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;
begin
objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
colItems := objWMIService.ExecQuery('SELECT * FROM Win32_Process','WQL',0);
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
WriteLn(Format('%-20s %6s %10s %10s %10s',['Caption','PID','User','Domain','Working Set (Kb Memory)']));
while oEnum.Next(1, colItem, iValue) = 0 do
begin
colItem.GetOwner(User,Domain);
if colItem.GetOwner(User, Domain) =0 then //get the user and domain
WriteLn(Format('%-20s %6s %10s %10s %10s',[colItem.Caption,colItem.ProcessId,User,Domain,colItem.WorkingSetSize/1024]))
else
WriteLn(Format('%-20s %6s %10s %10s %10s',[colItem.Caption,colItem.ProcessId,'','',colItem.WorkingSetSize/1024]));
end;
end;
begin
try
CoInitialize(nil);
try
GetWin32_Process;
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
Begin
Writeln(E.Classname, ': ', E.Message);
Readln;
End;
end;
end.
WMI非常慢,如果NiliDelphi想要创建像TaskManager这样的刷新进程列表的东西,我经常不会推荐WMI。 – Remko 2010-04-11 20:52:54
- 1. 从其他用户获取rhythmbox信息
- 2. SKYPE4COMLib获取其他用户信息?
- 3. 如何使用Microsoft Access或其他程序从网站获取信息?
- 4. 从Google API获取其他信息
- 5. 删除其他进程使用的文件并获取其信息
- 6. 使用Java获取无线网络的SSID和其他信息
- 7. 获取有关Windows上其他进程的信息
- 8. 获取用于其他iOS电池使用信息应用程式
- 9. 如何获取事务ID或其他信息,PayPal移动SDK
- 10. 如何从其他sonarqube插件获取信息
- 11. 如何从其他嵌套元素获取信息?
- 12. 如何存储其他用户信息?
- 13. 如何使用Java SDK获取AWS Kinesis Firehose流详细信息
- 14. Android应用程序可以从其他应用程序获取信息吗?
- 15. 在Firebase上获取其他用户的个人资料信息
- 16. 如何使用PHP获取信息?
- 17. 的Java读取其他信息在XML
- 18. 如何获取servlet中的当前用户名和其他详细信息?
- 19. 如何在iPhone中获取设备用户名的其他信息?
- 20. 如何获取用户的代码流失统计信息?
- 21. 使用Delphi修改另一个delphi程序的版本信息
- 22. 如何在Windows Phone上获得其他应用程序的信息?
- 23. 如何获取过程信息?
- 24. Ldap如何获取用户详细信息。像电子邮件和用户名其他详细信息
- 25. 使用JSON获取信息
- 26. TreeMap,如何获取密钥以获取其信息
- 27. 如何使用BatteryStatsHelper获取应用程序电池信息?
- 28. 如何在提交应用程序时添加其他信息
- 29. 如何向其他Android应用程序请求信息?
- 30. 获取有关SQL max查询结果的其他信息
什么是你的理由恢复是提高你的问题的编辑,并添加无用*信息*标签? – mghie 2010-04-12 09:20:11