拦截来自 Webview2 (Edge/Chromium) 的 Windows 消息

Intercepting Windows Messages from Webview2 (Edge/Chromium)

我最近将我的一个项目迁移到了 WebView2 and the last part I can't figure out is how to intercept the Windows Messages for the webview. My code is very similar to webview/webview,但我无法在他们的 GitHub 上找到帮助。

以前,我能够找到 webview 的 hWnd 并使用 SetWindowSubclass to add my own wndproc to the webview. However, I've used Spy++ 并尝试 SetWindowSubclass 出现在那里的所有 windows (见下文) ) 但他们中的 none 在我的 wndproc 中有任何 windows 消息,除了一些 window 我认为没有用的管理消息 - 我得到的最好的消息是 WM_PARENTYNOTIFY,但我对 WM_MOUSEMOVEWM_NCHITTEST 感兴趣 - 我都找不到。

我的目标是创建一个无边框、可拖动、可调整大小的基于 WebView2 的应用程序。

问题是,控制和获取所有这些输入的真正 window 在另一个进程中。您只会看到一个 window,它显示了您的过程中的输出。

研究 Spy++。 Chrome_WidgetWin_0 以下的所有内容都属于新流程 (MSEDGEWEBVIEW2),不属于您的流程。所以你不能用正常的技术子类化这样的 window。

所以如果你想继承这个window。您需要将新的 DLL 注入到这个新进程中。此 DLL 可能会子类化真正的 window。并且此 DLL 可能会通过任何 IPC 与您的托管程序进行通信。