2011-01-27 12 views
11

संभालें मान लें कि मेरे पास पहले से ही एक विंडो के लिए हैंडल है, मैं GetWindowThreadProcessId के साथ पीआईडी ​​प्राप्त कर सकता हूं। क्या कोई तरीका है कि मैं सभी प्रक्रियाओं को प्राप्त किए बिना प्रक्रिया का नाम प्राप्त कर सकता हूं और अपने पीआईडी ​​से मिलान करने का प्रयास कर सकता हूं?पिड से प्रक्रिया का नाम प्राप्त करें या

उत्तर

15

Process प्राप्त करने के लिए आप Process.GetProcessById का उपयोग कर सकते हैं। Process में चल रहे कार्यक्रम के बारे में बहुत सारी जानकारी है। Process.ProcessName आपको नाम देता है, Process.MainModule.FileName आपको निष्पादन योग्य फ़ाइल का नाम देता है।

+0

हाँ के लिए 0 को वापस कर देगा। धन्यवाद। और मैं प्रक्रिया के बारे में भी अन्य जानकारी प्राप्त कर सकता हूं। – user579674

+3

ध्यान दें कि Process.MainModule.Filename एक x86 प्रोग्राम से 64 बिट लक्ष्य पर कॉल करते समय विफल रहता है। ProcessName उस सीमा से पीड़ित नहीं है। – EricLaw

+0

@EricLaw क्या आप जानते हैं कि विपरीत सच है? एक x86 लक्ष्य पर Process.MainModule.Filename को कॉल करने के लिए 64 बिट प्रोग्राम का उपयोग करते समय की तरह? – FreeSnow

12
Process.GetProcessById(id).ProcessName 
0

// यहां कार्य प्रबंधक स्मृति को वापस करने के लिए एक साफ छोटी विधि है। यदि प्रक्रिया आईडी मौजूद नहीं है, तो यह एक अपवाद फेंक देगा और स्मृति

/// <summary> 
    /// Gets the process memory. 
    /// </summary> 
    /// <param name="processId">The process identifier.</param> 
    /// <returns></returns> 
    /// <para> </para> 
    /// <para> </para> 
    /// <exception cref="ArgumentException"> </exception> 
    /// <exception cref="ArgumentNullException"> </exception> 
    /// <exception cref="ComponentModel.Win32Exception"> </exception> 
    /// <exception cref="InvalidOperationException"> </exception> 
    /// <exception cref="PlatformNotSupportedException"> </exception> 
    /// <exception cref="UnauthorizedAccessException"> </exception> 
    public static long GetProcessMemory(int processId) 
    { 
     try 
     { 
      var instanceName = Process.GetProcessById(processId).ProcessName; 

      using (var performanceCounter = new PerformanceCounter("Process", "Working Set - Private", instanceName)) 
      { 
       return performanceCounter.RawValue/Convert.ToInt64(1024); 
      } 
     } 
     catch (Exception) 
     { 
      return 0; 
     } 
    } 
संबंधित मुद्दे

 संबंधित मुद्दे