This might be a simple question, but I have a winforms app that is loading a ChromiumWebBrowser control (CefSharp) and I can't figure out how to capture key preview events as they are all being swallowed by the control.
The standard attaching a handler to the PreviewKeyDown event of the browser control isn't working. Is there a known workaround?
CEF
is run in it's own message loop, so the standard events don't work.
The first an easiest option is to implement IKeyboardHandler
, you can check the CefSharp
source for a more detailed example (there's one that forwards messages to the parent window if required).
Second run with settings.MultiThreadedMessageLoop = false
, and call Cef.DoMessageLoopWork()
on application idle, this will integrate CEF
into the same message loop as your main application. Again, the source contains examples see https://github.com/cefsharp/CefSharp/blob/cefsharp/49/CefSharp.WinForms.Example/Program.cs#L63
The third option is to hook into the CEF
message loop, see https://github.com/cefsharp/CefSharp/blob/cefsharp/49/CefSharp.WinForms.Example/ChromeWidgetMessageInterceptor.cs for an example
CEF
= Chromium Embedded Framework
- CefSharp
is just a wrapper.