2012-09-26 4 views
1

У меня есть приложение Windows C# и в конечном итоге запускает диалог из компонента взаимодействия. Проблема заключается в том, что это диалоговое окно иногда появляется за основным окном приложения C#, заставляя пользователя alt-tab его находить.C# получить родительский процесс из дескриптора окна

Я положил меры на место, чтобы найти это диалоговое окно и вывести его вперед ...

private static extern bool SetForegroundWindow(IntPtr hWnd); 

public class SearchData 
{ 
    public string Wndclass; 
    public string Title; 
    public IntPtr hWnd; 
} 

private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, ref SearchData data); 
private delegate bool EnumWindowsProc(IntPtr hWnd, ref SearchData data); 

public static bool EnumProc(IntPtr hWnd, ref SearchData data) 
{ 
    //Code to determine whether the window from handle hWnd is our target window. 
    //apply handle, title, class to data and halt the enumeration 
} 

... но «открытие» диалог является проблематичным, так как Classname и форма изменения заголовка диалога.

Однако родительский процесс диалогового окна (диспетчер задач> Перейти к процессу) совпадает с текущим процессом. Поэтому, чтобы правильно «найти» это диалоговое окно, моя цель - перечислить все окна, найти родительский идентификатор processID и сравнить с CurrentProcess.

Есть ли способ получить общий родительский процесс из дескриптора окна?

ответ

1

GetWindowThreadProccessId будет выполнять работу.

+0

Отлично, спасибо. Этот ответ и этот пост (http://stackoverflow.com/questions/2281429/how-to-enumerate-all-windows-within-a-process) привели меня к решению. – MoSlo

0

Попробуйте скрывать окно приложения перед открытием диалогового окна. Таким образом, он не появится за ним.

+0

Не полное решение, поскольку диалог может появляться и за другими окнами (например, веб-браузер и т. Д.). Пользователи путаются и выбирают основное приложение из панели задач, ожидая появления диалогового окна. Между тем его там, он просто похоронен за другими окнами. Это особенно проблема с многоэкранными дисплеями. – MoSlo

Смежные вопросы