सादा सी # में, यह है कि आप उन सब के माध्यम से लूप करने के लिए है दिखता है:
// IntPtr myHandle = ...
Process myProcess = Process.GetProcesses().Single(
p => p.Id != 0 && p.Handle == myHandle);
ऊपर के उदाहरण जानबूझकर विफल रहता है संभाल नहीं पाया जाता है। अन्यथा, आप निश्चित रूप से SingleOrDefault
का उपयोग कर सकते हैं। जाहिर है, यह आपको पसंद नहीं है कि आप प्रक्रिया आईडी 0
के हैंडल का अनुरोध करते हैं, इसलिए अतिरिक्त स्थिति।
WINAPI का उपयोग करके, आप GetProcessId
का उपयोग कर सकते हैं। मैं इसे pinvoke.net पर नहीं मिल सकता है, लेकिन यह करना चाहिए:
[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);
(हस्ताक्षर एक DWORD
का उपयोग करता है, लेकिन इस प्रक्रिया आईडी नेट बीसीएल में int
रों का प्रतिनिधित्व कर रहे)
यह एक लगता है थोड़ा विचित्र है कि आपके पास एक हैंडल होगा, लेकिन प्रक्रिया आईडी नहीं है। प्रक्रिया हैंडल OpenProcess
पर कॉल करके अधिग्रहण की जाती है, जो एक प्रक्रिया आईडी लेती है।
मुझे एक एक्सेस अस्वीकृत संदेश (win32 अपवाद) मिलता है? – Grant
फिक्स्ड, लेकिन शायद आपको इसके बजाय WINAPI का उपयोग करना चाहिए। यही वह जगह है जिसे आपने पहली जगह पसंद किया :) – Thorarin
process.handle पहुंच से इनकार कर दिया गया है लेकिन। ** प्रक्रिया। मेनविंडोहैंडल ** त्रुटि मुक्त करता है –