【问题标题】:Finding the handle to a WPF window查找 WPF 窗口的句柄
【发布时间】:2010-12-06 02:02:16
【问题描述】:

Windows 窗体有一个属性 win1.Handle,如果我记得,它返回主窗口句柄的句柄?

是否有等效的方法来获取 WPF 窗口的句柄?

我在网上找到如下代码,

IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;

但我认为这对我没有帮助,因为我的应用程序有多个窗口。

谢谢!!

【问题讨论】:

  • 让我给你一些友好的建议,埃文。不要做货物崇拜编程!剖析您在网上找到的代码。您可以清楚地看到它通过了 Application.Current.MainWindow,因此您可以推断通过将引用传递给不同的窗口,您将得到答案。我从未使用过 WindowInteropHelper,但仍然能够通过推理来回答这个问题。
  • 你是对的,谢谢!我今天累了:)。
  • 没问题!我并不是说批评,只是为了提供帮助。我们都时不时地做一些货物崇拜。 :)

标签: wpf window handle


【解决方案1】:

你可以使用:

Process.GetCurrentProcess().MainWindowHandle

【讨论】:

    【解决方案2】:

    好吧,不要传递Application.Current.MainWindow,只需传递对您想要的任何窗口的引用:new WindowInteropHelper(this).Handle 等等。

    【讨论】:

    • 我刚刚发现 FileSave 通用对话框引用了一个顶级窗口,因此您可以传递例如对应用程序 MainWindow 的引用。保存 Interop 服务以供您真正需要时使用。
    【解决方案3】:

    如果出于某种原因您想要应用程序的所有Windows 的窗口句柄,您可以使用Application.Windows 属性来获取所有Windows,然后使用WindowInteropHandler 获取它们的句柄,就像您已经拥有的一样演示。

    【讨论】:

    • 这里可能缺少的是将句柄获取到 CONTROL(System.Windows.Controls.Control 而不是 System.Windows.Window)
    【解决方案4】:

    只需将您的窗口与 WindowsInteropHelper 类一起使用:

    // ... Window myWindow = get your Window instance...
    IntPtr windowHandle = new WindowInteropHelper(myWindow).Handle;
    

    现在,您正在请求应用程序的主窗口,其中总会有一个。但是,您可以在任何 Window 上使用相同的技术,只要它是 System.Windows.Window 派生的 Window 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多