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.
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 int
s 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With