【问题标题】:C# get parent process from window handleC#从窗口句柄获取父进程
【发布时间】:2015-04-10 20:30:28
【问题描述】:

我有一个 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
}

...但是“找到”对话框是有问题的,因为对话框的类名和表单标题发生了变化。

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

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

【问题讨论】:

    标签: c# process handle intptr


    【解决方案1】:

    GetWindowThreadProccessId 将完成这项工作。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不是一个完整的解决方案,因为对话框也可以出现在其他窗口后面(例如网络浏览器等)。用户感到困惑,并从任务栏中选择主应用程序,期望出现对话框。同时它在那里,它只是被埋在其他窗户后面。这尤其是多屏显示的问题。
    猜你喜欢
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多