У меня есть приложение 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.
Есть ли способ получить общий родительский процесс из дескриптора окна?
Отлично, спасибо. Этот ответ и этот пост (http://stackoverflow.com/questions/2281429/how-to-enumerate-all-windows-within-a-process) привели меня к решению. – MoSlo