15

Assuming I already have the handle to a window, I can get the PID with GetWindowThreadProcessId. Is there a way I can get the process name without having to get all the processes and try to match my PID?

Sae1962
  • 1,122
  • 15
  • 31
user579674
  • 2,159
  • 6
  • 30
  • 40

3 Answers3

20

You can use Process.GetProcessById to get Process. Process has a lot of information about the running program. Process.ProcessName gives you the name, Process.MainModule.FileName gives you the name of the executable file.

detunized
  • 15,059
  • 3
  • 48
  • 64
  • Yes you are right. Thank you. And I can also get other information too regarding the process. – user579674 Jan 27 '11 at 17:42
  • 3
    Note that Process.MainModule.Filename fails when called on a 64bit target from an x86 program. ProcessName does not suffer from that limitation. – EricLaw Jan 29 '13 at 20:40
  • @EricLaw Do you know if the opposite is true? Like when using a 64bit program to call Process.MainModule.Filename on an x86 target? – Freesnöw Jan 07 '16 at 17:20
14
string name;
using (var p = Process.GetProcessById(id)) { name = p.ProcessName; }
A.Baudouin
  • 2,855
  • 3
  • 24
  • 28
0

// Here is a neat little method to return the task manager memory. If the process id doesn't exist, it will throw an exception and return 0 for the memory

    /// <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;
        }
    }
puffgroovy
  • 240
  • 2
  • 5