在普通的C#中,看起来你必须遍历它们:
// IntPtr myHandle = ...
Process myProcess = Process.GetProcesses().Single(
p => p.Id != 0 && p.Handle == myHandle);
Run Code Online (Sandbox Code Playgroud)
如果找不到句柄,上面的例子故意失败.否则,你当然可以使用SingleOrDefault
.显然,它不喜欢你请求进程ID的句柄0
,因此额外的条件.
使用WINAPI,您可以使用GetProcessId
.我在pinvoke.net上找不到它,但这应该做到:
[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);
Run Code Online (Sandbox Code Playgroud)
(签名使用a DWORD
,但进程ID由int
.NET BCL中的s 表示)
你有一个句柄似乎有点奇怪,但不是一个进程ID.通过调用获取进程句柄OpenProcess
,该句柄获取进程ID.
归档时间: |
|
查看次数: |
33923 次 |
最近记录: |