提问人:Coder12345 提问时间:10/20/2023 最后编辑:Coder12345 更新时间:10/20/2023 访问量:109
如何在TEdgeBrowser中捕获OnKeyDown
How to capture OnKeyDown in TEdgeBrowser
问:
我知道将 JavaScript 事件注入 HTML 并使用 Web 消息返回代码的技术:onkeydown
EdgeBrowser.ExecuteScript("window.onkeydown = function(ev) { window.chrome.webview.postMessage(ev.keyCode); };");
稍后在事件中从参数中获取代码。TEdgeBrowser
OnWebMessageReceived
Args
procedure TfrmMain.EdgeBrowserWebMessageReceived(Sender: TCustomEdgeBrowser; Args: TWebMessageReceivedEventArgs);
begin
// parse received WebMessage
end;
问题是,虽然设置为 ,JavaScript 事件也停止工作。SettingsInterface.Set_IsScriptEnabled
false
有没有办法在不使用 JavaScript 和上述技术的情况下捕获键盘事件?TEdgeBrowser
我也试过:
OnKeyDown
事件,设置为 true。没有效果KeyPreview
- ApplicationEvents - 和 - 也没有效果。
OnMessage
WM_KEYDOWN
WM_KEYUP
答:
1赞
Salvador Díaz Fau
10/20/2023
#1
请考虑改用 WebView4Delphi 并尝试 WindowlessBrowser 演示。 它在 WebView2 中使用无窗口模式,你可以使用简单的 TApplicationEvents 截获 WM_KEY* 消息。
该模式使用 Delphi 不支持的 DirectComposition API,但您可以使用 MfPack 组件。
该演示几乎是 WebView2Samples 存储库中提供的官方 WebView2APISample 中代码的直接翻译。
评论
0赞
Coder12345
10/21/2023
谢谢,它是 TEdgeBrowser 的有效替代品,但无窗口(可视化托管)并不是我真正想要的。它在 Windows 7 或 8 上不起作用,需要我处理所有鼠标/键/拖动事件并将它们转发到 WebView2 控件,这不是我想要探索的坑洞。
评论