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

时间:2016-02-15 18:52:10

标签: c# cefsharp

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

我有两个问题:

  1. 我没有收到所有邮件(例如WM_MOUSEWHEEL)
  2. 单击控件会导致消息的值为528(= 0x210)而不是预期的513(= 0x201 = WM_LBUTTONDOWN)。
  3. 寻找答案我偶然发现了以下SO答案(https://stackoverflow.com/a/20489430/4247806),它提供了解释和解决方案,但对于不应该那么不寻常的任务来说,这似乎相当复杂。我也没有为CEF版本工作(CEF 3.2454.1344.g2782fb8,Chromium 45.0.2454.101和.net 4.5.1。)。

    具体问题是:

    1. 为什么不转发所有邮件?
    2. 为什么“鼠标按钮消息”(和其他人)不同?
    3. 显然,帮助会很棒;)

1 个答案:

答案 0 :(得分:0)

您链接的答案基本上是正确的,默认是在不同的线程中运行消息循环,这使得接收消息变得困难。您可以使用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以获取示例(如果您无法跟踪需要设置的部分,请下载源代码并单步执行)。