En plaine C#, il semble que vous devez parcourir tous:
// IntPtr myHandle = ...
Process myProcess = Process.GetProcesses().Single(
p => p.Id != 0 && p.Handle == myHandle);
L'exemple ci-dessus échoue volontairement si la poignée ne se trouve pas. Sinon, vous pouvez bien sûr utiliser SingleOrDefault
. Apparemment, il n'aime pas que vous demandiez le handle du processus ID 0
, d'où la condition supplémentaire.
En utilisant le WINAPI, vous pouvez utiliser GetProcessId
. Je ne pouvais pas trouver sur pinvoke.net, mais cela devrait faire:
[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);
(signature utilise un DWORD
, mais les ID de processus sont représentés par int
s dans la BCL .NET)
Il semble peu bizarre que vous ayez un handle, mais pas un ID de processus cependant. Les handles de processus sont acquis en appelant le OpenProcess
, qui prend un ID de processus.
Je reçois un message d'accès refusé (exception win32)? – Grant
Correction, mais vous devriez peut-être utiliser le WINAPI à la place. C'est ce que vous préférez en premier lieu :) – Thorarin
process.handle donne accès refusé mais. ** process.MainWindowHandle ** fonctionne sans erreur –