Я думаю, что вы можете перебирать список всех процессов, и для тех процессов, у которых есть окно, проверьте, начинается ли имя класса окна с HwndWrapper (я заметил, что окна WPF имеют имя класса, подобное этому: HwndWrapper [DefaultDomain ;; 2e60e21a-8752-4daf-820b-aed289668930])
Код должен быть примерно таким:
Process[] procs = Process.GetProcesses();
foreach(Process p in procs)
{
if (p.MainWindowHandle != null)
{
Console.WriteLine(p.MainWindowTitle);
StringBuilder sb = new StringBuilder(257);
RealGetWindowClass(p.MainWindowHandle, sb, 256);
Console.WriteLine(sb.ToString());
if(sb.ToString().StartsWith("HwndWrapper"))
{
Console.WriteLine("WPF window");
}
}
}
[DllImport("user32.dll")]
static extern uint RealGetWindowClass(IntPtr hwnd, [Out] StringBuilder pszType, uint cchType);
с некоторыми изменениями в зависимости от вашего случая. Имея дело с таким окном, следует предположить, что это окно WPF, а не принимать его наверняка, поэтому проверка ошибок должна быть обширной.