在普通的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 次 |
| 最近记录: |