Получить все открытые настольные приложения с помощью WPF - PullRequest
3 голосов
/ 28 декабря 2010

Я пытаюсь создать приложение Visual Tree Explorer (например, Snoop, Mole), которое должно автоматически идентифицировать все настольные приложения и определять, является ли оно приложением WPF.или нет.Я пытаюсь сделать это в WPF.Есть ли способ получить все открытые приложения WPF.Любой специальный API или встроенные функции в системных библиотеках и т. Д.

С уважением,

Джавахар

1 Ответ

3 голосов
/ 28 декабря 2010

Я думаю, что вы можете перебирать список всех процессов, и для тех процессов, у которых есть окно, проверьте, начинается ли имя класса окна с 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, а не принимать его наверняка, поэтому проверка ошибок должна быть обширной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...