【发布时间】:2016-08-06 18:10:29
【问题描述】:
这可能是一个简单的问题,但我有一个正在加载 ChromiumWebBrowser 控件 (CefSharp) 的 winforms 应用程序,我无法弄清楚如何捕获关键预览事件,因为它们都被控件吞噬了。
将处理程序附加到浏览器控件的 PreviewKeyDown 事件的标准不起作用。有已知的解决方法吗?
【问题讨论】:
这可能是一个简单的问题,但我有一个正在加载 ChromiumWebBrowser 控件 (CefSharp) 的 winforms 应用程序,我无法弄清楚如何捕获关键预览事件,因为它们都被控件吞噬了。
将处理程序附加到浏览器控件的 PreviewKeyDown 事件的标准不起作用。有已知的解决方法吗?
【问题讨论】:
CEF 在它自己的消息循环中运行,因此标准事件不起作用。
第一个最简单的选项是实现IKeyboardHandler,您可以查看CefSharp 源以获得更详细的示例(如果需要,可以将消息转发到父窗口)。
第二次使用settings.MultiThreadedMessageLoop = false 运行,并在应用程序空闲时调用Cef.DoMessageLoopWork(),这会将CEF 集成到与您的主应用程序相同的消息循环中。同样,源包含示例请参阅https://github.com/cefsharp/CefSharp/blob/cefsharp/49/CefSharp.WinForms.Example/Program.cs#L63
第三种选择是挂钩到CEF 消息循环,请参阅https://github.com/cefsharp/CefSharp/blob/cefsharp/49/CefSharp.WinForms.Example/ChromeWidgetMessageInterceptor.cs 的示例
CEF = Chromium Embedded Framework - CefSharp 只是一个包装器。
【讨论】: