Hola!
El primer ejemplo que armé sacado de consultas de Google (notepad debe estar corriendo):
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace test {
internal class Program {
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int GetWindowThreadProcessId(IntPtr handle, out uint processId);
public static string GetProcessPath(IntPtr hwnd) {
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
return proc.MainModule.FileName.ToString();
}
static void Main(string[] args) {
Process[] processes = Process.GetProcessesByName("notepad");
foreach (Process p in processes) {
IntPtr windowHandle = p.MainWindowHandle;
Console.WriteLine(GetProcessPath(windowHandle));
}
Console.ReadKey();
}
}
}
Algo a tener en cuenta es lo bits de tu ejecutable con los bits del ejecutable que quieres localizar. Si creas el tuyo como x86 y el target es x64, no funcionará. Deberás crear el tuyo como x64 para poder acceder a los de procesos de 64 bits.
Saludos!