我有一个 C# windows 应用程序,并最终从互操作组件启动一个对话框。问题是这个对话窗口有时会出现在 c# 应用程序的主窗口后面,迫使用户使用 alt-tab 来找到它。
我已经采取措施找到这个对话窗口并将其提出来......
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 和表单标题发生了变化。
但是,对话框窗口的父进程(任务管理器>转到进程)与当前进程相同。因此,为了正确“找到”这个对话框窗口,我的目标是枚举所有窗口,找到父进程 ID 并与 CurrentProcess 进行比较。
有没有办法从窗口句柄获取整个父进程?