Delphi 10.4.1+中TEdgeBrowser如何捕获F12打开开发者工具事件
解决方案
一、解决按键捕获失效问题
你用应用级消息捕获不到TEdgeBrowser的快捷键,是因为TEdgeBrowser底层基于微软WebView2控件,内部有独立的消息处理逻辑,会优先处理快捷键,不会往上抛到主窗体消息循环。推荐两种可行方案:
方案1:禁用内置DevTools快捷键,自行捕获按键
这是最简单的方案,直接关闭WebView2内置的F12/CTRL+SHIFT+C触发逻辑,你原有的消息捕获代码即可生效:
- 先在TEdgeBrowser的
OnCreated事件中禁用快捷键:
procedure TMainForm.EdgeBrowser1Created(Sender: TObject); begin // 禁用WebView2内置的开发者工具快捷键 EdgeBrowser1.CoreWebView2.Settings.AreDevToolsShortcutsEnabled := False; end;
- 你原本写在
ApplicationEvents1Message里的F12捕获逻辑就可以正常触发了,捕获后自行处理置顶逻辑,再主动打开开发者工具即可。
方案2:直接监听WebView2的快捷键事件
如果不想全局禁用快捷键,可以直接用TEdgeBrowser自带的OnAcceleratorKeyPressed事件,专门捕获WebView2收到的所有按键:
procedure TMainForm.EdgeBrowser1AcceleratorKeyPressed(Sender: TCustomEdgeBrowser; const AArgs: ICoreWebView2AcceleratorKeyPressedEventArgs); var Key: WPARAM; CtrlPressed, ShiftPressed: Boolean; begin AArgs.get_Key(@Key); AArgs.get_IsControlPressed(@CtrlPressed); AArgs.get_IsShiftPressed(@ShiftPressed); // 捕获F12 if Key = VK_F12 then begin // 这里先执行你需要的置顶调整逻辑 SetStatusLog(EID_KEYPRESS,'F12'); // 主动打开开发者工具 EdgeBrowser1.CoreWebView2.OpenDevToolsWindow; // 标记事件已处理,阻止WebView2默认逻辑 AArgs.put_Handled(True); Exit; end; // 捕获CTRL+SHIFT+C if CtrlPressed and ShiftPressed and (Key = Ord('C')) then begin // 同上处理逻辑 EdgeBrowser1.CoreWebView2.OpenDevToolsWindow; AArgs.put_Handled(True); Exit; end; end;
二、主动调用OpenDevToolsWindow的方法
可以直接调用,只要确保TEdgeBrowser已经完成初始化(即OnCreated事件已经触发,CoreWebView2对象不为空),直接执行以下代码即可:
// 主动打开开发者工具 EdgeBrowser1.CoreWebView2.OpenDevToolsWindow;
补充:解决DevTools窗口后置问题
打开开发者工具后,可以通过Windows API枚举当前进程的窗口,找到标题含「开发人员工具」的窗口,调用SetWindowPos设置其置顶属性,或者设置其Owner为你的主窗体,即可避免被主窗体遮挡。
内容的提问来源于stack exchange,提问作者stackman
相关产品推荐
相关产品推荐

