如何获取边缘窗口句柄 (HWND)?
How to get Edge window handle (HWND)?
我使用 CreateCoreWebView2Host(( 方法创建了边缘浏览器窗口。此方法采用父窗口句柄并创建子窗口,我们可以在其中导航网页。完成导航后,我需要返回我的窗口句柄,我相信我无法返回。
在Spy++上,我看到"Chrome_WidgetWin_0","Chrome_WidgetWin_1","中间D3D窗口"作为父窗口的子窗口。 哪一个是子窗口句柄?我以为我正在创建一个子窗口。
我尝试使用 FindWindowEx(( 获取窗口句柄,传递上述类名。但在我的项目中仍然没有得到预期的结果。所以我怀疑我是否传递了正确的手柄。
现在的问题是,如何获取CreateCoreWebView2Host创建的窗口的窗口句柄(HWND(?
可以使用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 线程很有用。这也是我用来在 Windows 窗体中聚焦浏览器的技巧。
WebView2 SDK 不提供此 HWND,因为 WebView2 连接到提供的父 HWND 的确切方式旨在成为实现详细信息,即使您使用相同版本的 WebView2 SDK,该实现细节也可能随着基础边缘浏览器或 WebView2 运行时的更新而更改。我们在很大程度上依赖于浏览器的逻辑进行渲染,因此将来可能会发生变化。
CoreWebView2Host(在最近的SDK版本中已重命名为CoreWebView2Controller(没有提供HWND,而是提供了各种方法来聚焦,缩放等。你想用 HWND 做什么?
- 如何获取边缘窗口句柄 (HWND)?
- 从运行服务的应用程序代码中提取窗口句柄
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- QOpenGLWidget:检索第三方库的窗口句柄
- 将窗口句柄从一个进程使用到另一个进程(插件 vst 音频)
- 编写 Windows 桌面应用程序时,我应该在哪里跟踪我的窗口句柄?
- 为什么错误1400无效的窗口句柄
- 如何从exe文件的名称中查找窗口句柄
- 捕获新创建的模态对话框的窗口句柄
- 获取 ActiveX 窗口句柄
- 如何正确传递窗口句柄
- 如何将窗口句柄从C#传递到C Win32 DLL
- 窗口句柄无法正确保存
- 获取光标下窗口的窗口句柄
- C++:通过进程id、进程句柄和标题名称从进程中获取唯一窗口的窗口句柄的最佳方法
- 错误 1400 无效的窗口句柄
- 将消息发送到窗口句柄
- 将 C# 窗口句柄传递给非托管代码 - 跨线程异常
- 渲染和窗口系统的独立性,通过窗口句柄进行连接
- 在QGraphicsScene上显示来自设备驱动程序的QWidget与本地窗口句柄(HWND)