这可能是一个简单的问题,但我有一个winforms应用程序正在加载ChromiumWebBrowser控件(CefSharp),我无法弄清楚如何捕获关键预览事件,因为它们都被控件吞噬 . 将处理程序附加到浏览器控件的PreviewKeyDown事件的标准不起作用 . 有没有已知的解决方法?谢谢
CEF 在其中运行's own message loop, so the standard events don' t工作 .
CEF
第一个最简单的选项是实现 IKeyboardHandler ,您可以查看 CefSharp 源以获取更详细的示例(如果需要,可以将消息转发到父窗口) .
IKeyboardHandler
CefSharp
第二次运行 settings.MultiThreadedMessageLoop = false ,并在应用程序空闲时调用 Cef.DoMessageLoopWork() ,这将 CEF 集成到与主应用程序相同的消息循环中 . 同样,源包含示例请参见https://github.com/cefsharp/CefSharp/blob/cefsharp/49/CefSharp.WinForms.Example/Program.cs#L63
settings.MultiThreadedMessageLoop = false
Cef.DoMessageLoopWork()
第三个选项是挂钩到 CEF 消息循环,请参阅https://github.com/cefsharp/CefSharp/blob/cefsharp/49/CefSharp.WinForms.Example/ChromeWidgetMessageInterceptor.cs作为示例
CEF = Chromium Embedded Framework - CefSharp 只是一个包装器 .
Chromium Embedded Framework
1 回答
CEF
在其中运行's own message loop, so the standard events don' t工作 .第一个最简单的选项是实现
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
只是一个包装器 .