En la llanura C#, parece que hay que recorrer todos ellos:
// IntPtr myHandle = ...
Process myProcess = Process.GetProcesses().Single(
p => p.Id != 0 && p.Handle == myHandle);
El ejemplo anterior falla intencionadamente si no se encuentra el mango. De lo contrario, podría usar SingleOrDefault
. Aparentemente, no le gusta que solicite el identificador de proceso 0
, de ahí la condición adicional.
Usando WINAPI, puede usar GetProcessId
. No podía encontrar en pinvoke.net, pero esto debería hacer:
[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);
(firma utiliza un DWORD
, pero los identificadores de proceso están representadas por int
s en el .NET BCL)
Parece una Es extraño que tengas un identificador, pero no una ID de proceso. Los identificadores de proceso se adquieren llamando al OpenProcess
, que toma una ID de proceso.
recibo un mensaje de acceso denegado (excepción win32)? – Grant
Solucionado, pero quizás debería usar WINAPI en su lugar. Eso es lo que preferiste en primer lugar :) – Thorarin
process.handle da acceso denegado pero. ** process.MainWindowHandle ** se ejecuta sin errores –