Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get running process given process handle

Tags:

c#

process

handle

can someone tell me how i can capture a running process in c# using the process class if i already know the handle?

Id rather not have not have to enumerate the getrunning processes method either. pInvoke is ok if possible.

like image 298
Grant Avatar asked Aug 14 '09 08:08

Grant


1 Answers

In plain C#, it looks like you have to loop through them all:

// IntPtr myHandle = ...
Process myProcess = Process.GetProcesses().Single(
    p => p.Id != 0 && p.Handle == myHandle);

The above example intentionally fails if the handle isn't found. Otherwise, you could of course use SingleOrDefault. Apparently, it doesn't like you requesting the handle of process ID 0, hence the extra condition.

Using the WINAPI, you can use GetProcessId. I couldn't find it on pinvoke.net, but this should do:

[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);

(signature uses a DWORD, but process IDs are represented by ints in the .NET BCL)

It seems a bit odd that you'd have a handle, but not a process ID however. Process handles are acquired by calling OpenProcess, which takes a process ID.

like image 141
Thorarin Avatar answered Oct 05 '22 23:10

Thorarin