Trong đồng bằng C#, có vẻ như bạn phải lặp qua tất cả:
// IntPtr myHandle = ...
Process myProcess = Process.GetProcesses().Single(
p => p.Id != 0 && p.Handle == myHandle);
Ví dụ trên cố ý không nếu xử lý không được tìm thấy. Nếu không, tất nhiên bạn có thể sử dụng SingleOrDefault
. Rõ ràng, nó không giống như bạn yêu cầu xử lý của quá trình ID 0
, do đó các điều kiện bổ sung.
Sử dụng WINAPI, bạn có thể sử dụng GetProcessId
. Tôi không thể tìm thấy nó trên pinvoke.net, nhưng điều này nên làm:
[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);
(chữ ký sử dụng một DWORD
, nhưng quá trình ID được đại diện bởi int
s trong NET BCL)
Có vẻ như một bit lẻ mà bạn có một xử lý, nhưng không phải là một quá trình ID tuy nhiên. Xử lý quy trình được mua lại bằng cách gọi số OpenProcess
, có ID tiến trình.
tôi nhận được thông báo từ chối truy cập (ngoại lệ win32)? – Grant
Đã sửa lỗi, nhưng có lẽ bạn nên sử dụng WINAPI thay thế. Đó là những gì bạn thích ở nơi đầu tiên :) – Thorarin
process.handle cấp quyền truy cập bị từ chối nhưng. ** process.MainWindowHandle ** chạy lỗi miễn phí –