我想從我的應用程序中獲得與所有線程(主要的,GUI線程除外)的列表,以便對它們執行一些操作。 (設置優先級,殺死,暫停等) 如何做到這一點?我如何獲得我的應用程序創建的所有線程的列表
回答
你可以用我TProcessInfo類:
var
CurrentProcess : TProcessItem;
Thread : TThreadItem;
begin
CurrentProcess := ProcessInfo1.RunningProcesses.FindByID(GetCurrentProcessId);
for Thread in CurrentProcess.Threads do
Memo1.Lines.Add(Thread.ToString);
end;
您可以訪問使用WMI此信息。
WIN32_Process可以爲您提供有關在Machine上執行的進程的所有信息。對於每個進程,你可以給ThreadsCount,Handle,...
另一個類,WIN32_Thread可以給你有關Machine上運行的所有線程的詳細信息。此類具有一個名爲ProcessId的屬性,用於1個進程的搜索特定線程(類WIN32_Process)。
爲了測試它,你可以關於命令行窗口中執行此:
// all processes
WMIC PROCESS
// information about Delphi32
WMIC PROCESS WHERE Name="delphi32.exe"
// some information about Delphi32
WMIC PROCESS WHERE Name="delphi32.exe" GET Name,descrption,threadcount,Handle
(NOTE: The handle for delphi32.exe in my machine is **3680**)
類似,你可以使用過程中的處理與WIN32_Thread做。
Excuse.me for my bad english。
問候。
非常簡單實用的例子,謝謝! – TPAKTOPA 2013-12-17 15:04:29
另一種選擇是使用CreateToolhelp32Snapshot,Thread32First和Thread32Next功能。
看到這個非常簡單的例子(在Delphi 7和Windows 7中測試)。
program ListthreadsofProcess;
{$APPTYPE CONSOLE}
uses
PsAPI,
TlHelp32,
Windows,
SysUtils;
function GetTthreadsList(PID:Cardinal): Boolean;
var
SnapProcHandle: THandle;
NextProc : Boolean;
TThreadEntry : TThreadEntry32;
begin
SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); //Takes a snapshot of the all threads
Result := (SnapProcHandle <> INVALID_HANDLE_VALUE);
if Result then
try
TThreadEntry.dwSize := SizeOf(TThreadEntry);
NextProc := Thread32First(SnapProcHandle, TThreadEntry);//get the first Thread
while NextProc do
begin
if TThreadEntry.th32OwnerProcessID = PID then //Check the owner Pid against the PID requested
begin
Writeln('Thread ID '+inttohex(TThreadEntry.th32ThreadID,8));
Writeln('base priority '+inttostr(TThreadEntry.tpBasePri));
Writeln('');
end;
NextProc := Thread32Next(SnapProcHandle, TThreadEntry);//get the Next Thread
end;
finally
CloseHandle(SnapProcHandle);//Close the Handle
end;
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
GettthreadsList(GetCurrentProcessId); //get the PID of the current application
//GettthreadsList(5928);
Readln;
end.
不要忘記TThreadEntry.dwSize是由Thread32First和Thread32Next設置的**,所以你應該在訪問其他字段前檢查它。不同版本的Windows返回不同數量的有效數據。 – 2014-04-02 17:22:05
如果它們是你的線程,那麼我將創建一個應用程序全局線程管理器來創建時自行註冊。然後,您可以使用線程管理器正常監視,暫停和關閉線程。
- 1. 我如何獲得所有安裝的應用程序列表?
- 2. 我如何獲得我的應用程序的所有用戶
- 3. 如何獲得運行我的應用程序的所有用戶的列表?
- 4. 如何獲得.Net應用程序中所有線程的列表?
- 5. 如何獲得我所有的Facebook應用程序用戶?
- 6. 如何獲得Android應用程序的應用程序列表?
- 7. Facebook。如何獲取我的應用程序的所有用戶列表?
- 8. 我如何獲得已添加我的Facebook應用程序的「朋友」列表?
- 9. 如何讓我的rails應用程序中的所有路線?
- 10. 所見即所得的我的Rails應用程序的建議
- 11. 應用程序沒有正確更改路線。我如何獲得routeConfig爲我的應用程序工作?
- 12. 如何捕獲我的應用程序的所有輸出?
- 13. Phusion乘客:在我的所有應用程序上獲得404
- 14. 如何獲得啓動我的應用程序的流程?
- 15. 爲我的待辦事項列表應用程序創建表
- 16. 我可以在我的c#應用程序中獲得所有線程的堆棧跟蹤嗎?
- 17. 我如何獲得所有安裝的應用程序名稱使用iHasApp
- 18. 如何獲得應用程序中創建的所有類型(完全限定)的列表啓動
- 19. 我如何在我的iPhone應用程序中獲得方向
- 20. 如何獲取所有安裝的應用程序列表?
- 21. 我可以獲得授權我的Twitter應用程序的用戶列表嗎?
- 22. IPHONE:列出我的應用程序創建的所有視圖和子視圖
- 23. 如何獲得創建帖子的所有用戶列表
- 24. 我如何獲得所有Android應用程序類別的名稱?
- 25. 我的程序只獲得陣列的第一個值,我需要所有的
- 26. 如何獲得我所有的實體映射表的列表?
- 27. 有沒有辦法獲得所有安裝的iPhone應用程序的列表?
- 28. 創建我的NFC應用程序
- 29. 金字塔:如何獲得視圖內的所有應用程序的路線?
- 30. 我的線程沒有得到通知,我的程序掛起
您需要一個自定義庫,名爲** Process Info ** – TPAKTOPA 2013-12-17 14:02:37
鏈接已損壞,該域名不再存在。 2012年的網頁有一個[存檔副本](http://web.archive.org/web/20121010001118/http://vcldeveloper.com/products/products-components/process-info),但代碼下載不見了。 – 2016-07-27 23:30:45