我有以下问题。我正在使用webbrowser delphi组件,碰巧访问网站这个消息框出现在我身上但是,我把一个代码放在一个计时器中,以便当它出现时对话关闭它。
var
hand: Thandle;
begin
hand := findwindow(nil,'Windows Internet Explorer');
SendMessage(hand, WM_CLOSE, 0, 0);
end;
但出现时不会关闭该框。我现在发生了什么,留下一张照片让他们理解一点问题谢谢。我希望这个问题能够理解
答案 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功能激活对话框。