【问题标题】:How to get Edge window handle (HWND)?如何获取边缘窗口句柄(HWND)?
【发布时间】:2020-10-22 08:36:57
【问题描述】:

我使用 CreateCoreWebView2Host() 方法创建了边缘浏览器窗口。此方法获取父窗口句柄并创建子窗口,我们可以在其中导航网页。完成导航后,我需要返回我的窗口句柄,我相信我无法返回。

在 Spy++ 上,我将“Chrome_WidgetWin_0”、“Chrome_WidgetWin_1”、“中间 D3D 窗口”视为父窗口的子窗口。哪个是子窗口句柄?我以为我正在创建一个子窗口。

我尝试使用传递上述类名的 FindWindowEx() 获取窗口句柄。但在我的项目中仍然没有得到预期的结果。所以我怀疑我是否传递了正确的句柄。

现在的问题是,如何获取 CreateCoreWebView2Host 创建的窗口的窗口句柄(HWND)?

【问题讨论】:

  • 你有没有用 Spy++ 来嗅探那个子窗口有什么类名?
  • 是的,我做到了。子类名称在问题中。
  • @TippuR 你解决过这个问题吗?
  • @Chris :我创建了另一个子窗口,在其中启动了边缘浏览器。该函数返回子窗口句柄。
  • 该句柄是否能够返回 WM_NCHITTEST 或类似的东西?

标签: c++ webview2


【解决方案1】:

您可以通过使用GetWindow 获取边缘窗口句柄,将WebView2 控件的Handle 作为第一个参数传递给它,并将GW_CHILD 作为第二个参数传递给它。例如:

public const uint GW_CHILD = 5;
[DllImport("user32.dll")]
public static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);
[DllImport("user32.dll")]
public static extern IntPtr SetFocus(IntPtr hWnd);

WebView2 webView21 = new Microsoft.Web.WebView2.WinForms.WebView2();
private async void Form1_Load(object sender, EventArgs e)
{
    webView21.Dock = DockStyle.Fill;
    this.Controls.Add(webView21);
    await webView21.EnsureCoreWebView2Async();
    webView21.Source = new Uri("https://bing.com");

    webView21.NavigationCompleted += WebView21_NavigationCompleted;
}

private void WebView21_NavigationCompleted(
    object sender, CoreWebView2NavigationCompletedEventArgs e)
{
    var child = GetWindow(webView21.Handle, GW_CHILD);
    SetFocus(child);
}

注意:您可能会发现这个GitHub thread 很有用。这也是我在 Windows 窗体中使用 focus the browser 的技巧。

【讨论】:

    【解决方案2】:

    WebView2 SDK 不提供此 HWND,因为 WebView2 连接到提供的父 HWND 的确切方式旨在成为一个实现细节,即使您留在相同版本的 WebView2 SDK。我们在很大程度上依赖于浏览器的渲染逻辑,因此这在未来可能会发生变化。

    CoreWebView2Host(在最近的 SDK 版本中更名为CoreWebView2Controller)没有提供 HWND,而是为您提供了各种聚焦、缩放等方法。你想用 HWND 做什么?

    【讨论】:

    • 调用我的方法的模块处理调整窗口事件。我应该为给定的父创建子窗口,浏览网页并返回子窗口句柄。现在我不知道如何返回它,因为 CreateCoreWebView2Host() 正在创建子窗口。
    • 没有支持的方式来获取 WebView2 HWND 以履行您描述的接口合同。如前所述,不建议使用不受支持的机制来获取 WebView2 HWND,因为它们将来可能会中断。如果您愿意,可以在 github.com/MicrosoftEdge/WebViewFeedback 处提出功能请求
    猜你喜欢
    • 2013-02-08
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 2020-02-03
    相关资源
    最近更新 更多