如何拦截 CefSharp.WinForms.ChromiumWebBrowser 的 WndProc 消息

本文关键字:WndProc 消息 ChromiumWebBrowser WinForms 何拦截 CefSharp | 更新日期: 2023-09-27 18:34:38

为了拦截CefSharp.WinForms.ChromiumWebBrowser控件的WndProc消息,我正在使用派生类,因此可以使用Protected Overrides Sub WndProc(ByRef m As Message)

我有两个问题:

  1. 我没有收到所有消息(例如WM_MOUSEWHEEL(
  2. 单击控件会导致出现值为 528 (=0x210( 而不是预期的 513 (= 0x201 = WM_LBUTTONDOWN( 的消息。

在寻找答案时,我偶然发现了以下 SO 答案 (https://stackoverflow.com/a/20489430/4247806(,它提供了解释和解决方案,但对于一项不应该那么不寻常的任务来说,它似乎相当复杂。我也没有让它适用于我的 CEF 版本(CEF 3.2454.1344.g2782fb8、铬 45.0.2454.101 和 .net 4.5.1.(。

具体问题是:

  1. 为什么不是所有邮件都"转发"?
  2. 为什么"鼠标按下消息"(和其他消息(不同?

显然,帮助将是巨大的;)

如何拦截 CefSharp.WinForms.ChromiumWebBrowser 的 WndProc 消息

你链接的答案基本正确,默认是在不同的线程中运行消息循环,这使得接收消息变得困难。您可以使用NativeWindow挂钩相关进程,有关示例,请参阅 https://github.com/cefsharp/CefSharp/blob/cefsharp/47/CefSharp.WinForms.Example/ChromeWidgetMessageInterceptor.cs#L22。下载源代码以查看其实际效果。

另一种选择是使用现有的WinForms消息循环,有关示例,请参阅 https://github.com/cefsharp/CefSharp/commit/fe11f2eada542f49e4eef0feed9b2b0978446bbf#diff-f142d024925e73816b0fabd620d2f71d(下载源代码并在遵循需要设置哪些部分时遇到问题(。