Delphi 德尔菲:webbrowser是专注于/还是真正掌握webbrowser

Delphi 德尔菲:webbrowser是专注于/还是真正掌握webbrowser,delphi,focus,browser,refresh,Delphi,Focus,Browser,Refresh,我想禁用Webbrowser上的F5。为此,我可以使用Application.OnMessage。 但我想在世界银行关注的时候强制执行这条规则 但每一种都失败了: 1.)获取WB的HWND-以比较Msg.HWND 2.)获取WB的聚焦状态,或查看其何时聚焦 谢谢你对这个问题的每一个想法 dd我假设您的真正目标是禁用当前显示的网页的重新加载或刷新(通常通过按F5发出)。进一步假设您谈论的是嵌入式Internet Explorer,我建议使用TEmbeddedWBfrom。它有一个事件OnRefre

我想禁用Webbrowser上的F5。为此,我可以使用Application.OnMessage。 但我想在世界银行关注的时候强制执行这条规则

但每一种都失败了:

1.)获取WB的HWND-以比较Msg.HWND

2.)获取WB的聚焦状态,或查看其何时聚焦

谢谢你对这个问题的每一个想法


dd

我假设您的真正目标是禁用当前显示的网页的重新加载或刷新(通常通过按F5发出)。进一步假设您谈论的是嵌入式Internet Explorer,我建议使用
TEmbeddedWB
from。它有一个事件
OnRefresh
,您可以通过设置
cancel:=True来取消刷新。因此,无需手动捕捉关键点


如果您没有选择选择
TEmbeddedWB
的余地,并且一直使用
TWebBrowser
,那么看看
OnRefresh
的实现可能会很有启发性。

因为我认为最好的方法是检查HW的类名以及我在Application.Onmessage中得到的内容

这就像“禁用上下文菜单”基于“Internet\u Explorer\u Server”类名一样

请参见示例:

procedure TDDGoogleMapsObject.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
    szClassName: array[0..255] of Char;
const
    ie_name = 'Internet Explorer_Server';
begin
    if Msg.message = WM_KEYDOWN then
        if Msg.wParam = VK_F5 then begin
            GetClassName(Msg.HWND, szClassName, SizeOf(szClassName));
            if lstrcmp(@szClassName[0], @ie_name[1]) = 0
                then Handled := True;
            if not Handled
                then beep;
        end;
end;
这可以检查VK_F5键的来源。如果它来自IE windows,则我们禁用它。 另一个我们允许推进的案例

感谢您的帮助:
dd

应用程序或外部浏览器中的TWebBrowser(Internet Explorer)?您不需要“在浏览器聚焦时禁用F5”,而需要截取F5窗口消息。您无法在windows中控制键盘。您会收到消息,您可以拦截这些消息,然后“标记为已处理”。这是一样的,但如果你明白你在做什么,你就能更好地理解它。您不需要全局钩住F5,事实上这样做是有问题的。我已经用@RRUZ help解决了类似的问题@沃伦-这是一个很长的时间,我扩展了一个例子的答案。除此之外,它看起来是一个非常好的组成部分,似乎它没有被更新的IE9。。。看看他的论坛,然后自己测试一下。