回答
在純C#,它看起來像你通過他們都有循環:
// IntPtr myHandle = ...
Process myProcess = Process.GetProcesses().Single(
p => p.Id != 0 && p.Handle == myHandle);
如果句柄沒有找到上面的例子故意失敗。否則,你當然可以使用SingleOrDefault
。顯然,它不喜歡你請求進程ID 0
的句柄,因此是額外的條件。
使用WINAPI,您可以使用GetProcessId
。我找不到它pinvoke.net,但這應該做到:
[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);
(簽名使用DWORD
,但進程ID由.NET BCL int
小號代表)
這似乎是一個有點奇怪,你有一個句柄,但不是一個進程ID。通過調用OpenProcess
來獲取進程句柄,該進程句柄需要一個進程ID。
using System.Diagnostics;
class ProcessHandler {
public static Process FindProcess(IntPtr yourHandle) {
foreach (Process p in Process.GetProcesses()) {
if (p.Handle == yourHandle) {
return p;
}
}
return null;
}
}
似乎沒有簡單的方法來通過.Net API來做到這一點。問題是,你從哪裏得到這個處理?如果以同樣的方式,你可以訪問該進程的ID,你可以使用:
Process.GetProcessById (int iD)
您可以使用GetWindowThreadProcessId WinAPI的通話
http://www.pinvoke.net/default.aspx/user32/GetWindowThreadProcessId.html
要獲得進程ID - 然後使用它得到一個Process對象.....
但是,爲什麼你不想枚舉正在運行的進程的ID?
那個需要一個窗口句柄。他有一個流程句柄。 WINAPI'GetProcessId'就是他所需要的。 – Thorarin 2009-08-14 08:43:08
- 1. 獲取進程主線程的句柄
- 2. 獲取給定進程的文件句柄
- 3. 獲取進程表格的句柄c#
- 4. Win32API - 如何從進程句柄獲取進程的文件名?
- 5. 獲取獨佔進程句柄
- 6. 從瀏覽器進程獲取句柄
- 7. 通過PID獲取進程句柄
- 8. 獲取正在運行的進程的列表,並殺死特定的進程
- 9. 按進程名稱獲取進程句柄
- 10. 如何從進程ID獲取進程句柄?
- 11. lldbinit中的進程句柄
- 12. 如何通過給出正在運行的進程名稱來獲取窗口句柄?
- 13. 獲取正在運行的metro應用程序的進程ID
- 14. 如何在Android進程中獲取正在運行的線程?
- 15. 如何獲取Windows中當前進程的所有子進程的句柄?
- 16. 重定向正在運行的進程
- 17. 獲取所有窗口句柄和給定進程名稱的相應標籤句柄
- 18. 從進程得到句柄
- 19. Qt句柄進程終止
- 20. 獲取VB.NET中PID進程的所有子窗口的句柄
- 21. 獲取當前正在執行的存儲過程的句柄
- 22. 如何從win32進程獲取線程句柄列表?
- 23. 獲取正在運行的進程列表,獲取活動進程(和它的應用程序)的Flex/AIR
- 24. 獲取正在運行的進程的在bash輸出
- 25. WiseScript:獲取用戶執行一個正在運行的進程
- 26. 獲取正在運行的進程中的scala List的內容?
- 27. 獲取當前進程中所有句柄的名稱
- 28. 如何獲取本地COM服務器的進程句柄?
- 29. 通過窗口句柄獲取未知進程的名稱?
- 30. C# - 嘗試獲取進程的句柄時訪問被拒絕
我得到一個訪問被拒絕的消息(win32異常)? – Grant 2009-08-14 08:23:50
已修復,但也許您應該使用WINAPI。這是你首選的東西:) – Thorarin 2009-08-14 08:41:16
process.handle給予訪問被拒絕,但。 ** process.MainWindowHandle **無誤運行 – 2015-09-29 12:00:16