获取运行流程给定流程处理

Gra*_*ant 9 c# process handle

如果我已经知道句柄,有人可以告诉我如何使用进程类在c#中捕获正在运行的进程吗?

我宁愿也不必枚举getrunning流程方法.如果可能的话,pInvoke是可以的.

Tho*_*rin 9

在普通的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.