C#从窗口句柄获取父进程

时间:2012-09-26 08:29:27

标签: c# process handle intptr

我有一个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和表单标题会发生变化。

但是,对话窗口的父进程(任务管理器> Go To Process)与当前进程相同。因此,要正确“找到”此对话框窗口,我的目标是枚举所有窗口,找到父进程ID并与CurrentProcess进行比较。

有没有办法从窗口句柄获取整个父进程?

2 个答案:

答案 0 :(得分:1)

GetWindowThreadProccessId将完成这项工作。

答案 1 :(得分:0)

在打开对话框之前尝试隐藏应用程序窗口。这样它就不会出现在它背后。