gpt4 book ai didi

c# - Watin DialogHandler 关闭 SaveFileDialog

转载 作者:太空狗 更新时间:2023-10-29 23:52:17 25 4
gpt4 key购买 nike

基于 this answer我创建了一个自定义 DialogHandler 来处理从 WebBrowser 控件中弹出的 Javascript 警告框。

Handler 附加到继承的 WatiN IE 浏览器,称为 ExtendedIeBrowser

由于未知原因,watin 的 DialogHandler 会干扰 Winforms SaveFiledialogs。 SaveFileDialog 通过返回 DialogResult.Cancel 自动关闭。奇怪的是,自定义处理程序的 Handle() 从未被调用。仅 CanHandle() 被调用(两次)并返回 false,因此根本不应处理该对话框,因此它应保持打开状态。

我可以做些什么来克服这种奇怪的行为吗?

这是 ExtendedIeBrowser 来源:

public class ExtendedIeBrowser : IE
{
private IntPtr hwnd;
public ExtendedIeBrowser(WebBrowser webBrowserControl) : base(webBrowserControl.ActiveXInstance, false)
{
}

public void Initialize(WebBrowser webBrowserControl)
{
hwnd = webBrowserControl.FindForm().Handle;
StartDialogWatcher();
}

public override IntPtr hWnd { get { return hwnd; } }

protected override void Dispose(bool disposing)
{
hwnd = IntPtr.Zero;
base.Dispose(disposing);
}
}

遵循 CustomPopupDialogHandler 来源:

class CustomPopupDialogHandler : ReturnDialogHandler
{
protected static Logger _logger = LogManager.GetCurrentClassLogger();

public override bool HandleDialog(Window window)
{
bool handled = false;
try
{
var button = GetWantedButton(window);
if (button != null)
{
button.Click();
}
handled = true;
}
catch (Exception ex)
{
_logger.ErrorException("HandleDialog", ex);
}
return handled;
}

public override bool CanHandleDialog(Window window)
{
bool canHandle = false;
try
{
canHandle = GetWantedButton(window) != null;
}
catch (Exception ex)
{
_logger.ErrorException("CanHandleDialog", ex);
}
return canHandle;
}

private WinButton GetWantedButton(Window window)
{
WinButton button = null;
try
{
if (window.Title.Contains("Windows Internet Explorer") || window.Title.Contains("Message from webpage"))
{
var windowButton = new WindowsEnumerator().GetChildWindows(window.Hwnd, w => w.ClassName == "Button" && (new WinButton(w.Hwnd).Title.Contains("Leave") || new WinButton(w.Hwnd).Title.Contains("OK")).FirstOrDefault();
if (windowButton != null)
{
string s = windowButton.Title;
button = new WinButton(windowButton.Hwnd);
}
}
}
catch (Exception ex)
{
_logger.ErrorException("GetWantedButton", ex);
}
return button;
}
}

最佳答案

试试这个:

WatiN.Core.Settings.AutoCloseDialogs = false;

默认设置为 true

关于c# - Watin DialogHandler 关闭 SaveFileDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com