回答
在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. 從Google API獲取其他信息
- 4. 從其他網站獲取信息
- 5. 刪除其他進程使用的文件並獲取其信息
- 6. 使用Java獲取無線網絡的SSID和其他信息
- 7. 獲取有關Windows上其他進程的信息
- 8. 獲取用於其他iOS電池使用信息應用程式
- 9. 如何從其他嵌套元素獲取信息?
- 10. 如何從其他sonarqube插件獲取信息
- 11. 如何獲取事務ID或其他信息,PayPal移動SDK
- 12. 如何從SqlServer表中獲取列名稱和其他信息?
- 13. 如何使用Java SDK獲取AWS Kinesis Firehose流詳細信息
- 14. 如何存儲其他用戶信息?
- 15. 如何存儲其他用戶信息
- 16. 如何獲取android程序詳細信息,如包名稱和其他
- 17. 從我的Java應用程序的其他程序獲取信息
- 18. Android應用程序可以從其他應用程序獲取信息嗎?
- 19. 如何使用PHP獲取信息?
- 20. 如何使用java獲取BIOS信息?
- 21. 如何使用LINQ獲取此信息
- 22. 使用perf或其他方式獲取C程序的運行時間(或其他統計信息)
- 23. phpinfo()獲取其信息?
- 24. 的Java讀取其他信息在XML
- 25. 如何在iPhone中獲取設備用戶名的其他信息?
- 26. C++/Linux如何獲得其他用戶的讀取權限統計信息?
- 27. 如何獲取servlet中的當前用戶名和其他詳細信息?
- 28. 使用Delphi修改另一個delphi程序的版本信息
- 29. MongoError其他信息
- 30. 如何獲取用戶的代碼流失統計信息?
什麼是你的理由恢復是提高你的問題的編輯,並添加無用*信息*標籤? – mghie 2010-04-12 09:20:11