无法关闭webbrowser delphi消息框

时间:2015-11-04 01:41:05

标签: delphi webbrowser-control

我有以下问题。我正在使用webbrowser delphi组件,碰巧访问网站这个消息框出现在我身上但是,我把一个代码放在一个计时器中,以便当它出现时对话关闭它。

var
  hand: Thandle;
begin
  hand := findwindow(nil,'Windows Internet Explorer');
  SendMessage(hand, WM_CLOSE, 0, 0);
end;

但出现时不会关闭该框。我现在发生了什么,留下一张照片让他们理解一点问题谢谢。我希望这个问题能够理解

enter image description here

1 个答案:

答案 0 :(得分:6)

对话框未响应WM_CLOSE消息而关闭,因为对话框的标题栏中没有关闭按钮,如屏幕截图中清楚显示的那样。此特定对话框通过Task Dialog显示为TaskDialogIndirect(),未指定TDF_ALLOW_DIALOG_CANCELLATION标记:

  

<强> TDF_ALLOW_DIALOG_CANCELLATION
  表示即使在dwCommonButtons或pButtons成员中未指定取消按钮,也可以使用Alt-F4,Escape和标题栏的关闭按钮关闭对话框。

如果没有该标志,则只能通过单击其中一个提供的Command Links按钮取消对话框。因此,您必须枚举对话框的子控件,直到找到您感兴趣的按钮,然后以可编程方式“点击”它,例如:

var
  Dlg, Sink, Btn: THandle;
begin
  Dlg := FindWindow('#32770', 'Windows Internet Explorer');
  //SendMessage(Dlg, WM_CLOSE, 0, 0);
  Dlg := FindWindowEx(Dlg, 0, 'DirectUIHWND', nil);
  Sink := FindWindowEx(Dlg, 0, 'CtrlNotifySink', nil);
  while Sink <> 0 do
  begin
    Btn := FindWindowEx(Sink, 0, 'BUTTON', nil);
    if Btn <> 0 then
    begin
      // TODO: verify this is actually the button you want...
      SendMessage(Btn, BM_CLICK, 0, 0);
      Break;
    end;
    Sink := FindWindowEx(Dlg, Sink, 'CtrlNotifySink', nil);
  end;
end;

关于BM_CLICK消息的提醒:

  

如果按钮位于对话框中且对话框未激活,则 BM_CLICK 消息可能会失败。为确保在这种情况下取​​得成功,请在将 BM_CLICK 消息发送到按钮之前调用SetActiveWindow功能激活对话框。