【问题标题】:WinForms Web Browser control forcing refocus?WinForms Web 浏览器控件强制重新聚焦?
【发布时间】:2010-02-21 22:26:11
【问题描述】:

我正在尝试自动化一个需要重复单击按钮的 Web 流程。当我的代码“单击”该按钮(从表单上的 WebBrowser 控件获得的 HtmlElement)时,它会将焦点带回我的应用程序,更具体地说是 WebBrowser 控件。我希望更好地自动化这个过程,以便用户可以在过程进行时做其他事情,但是如果窗口因为获得焦点而正在取消最小化自身,则不会发生这种情况。

点击相关的代码为:

HtmlElement button = Recruiter.Document.GetElementById("recruit_link");
button.InvokeMember("click");

我也尝试过 button.RaiseEvent("onclick") 并得到完全相同的结果,但焦点问题等等。

我也尝试过隐藏表单,但是当调用 InvokeMember/RaiseEvent 方法时,我正在处理的任何事情都会失去焦点,但由于表单不可见,所以焦点似乎无处可去。

关于网络浏览器的唯一非默认设置是它的 URI 被设置为我的页面并且 ScriptErrorsSuppressed 被设置为 True。

【问题讨论】:

  • C# 编程语言没有网络浏览器控件。
  • 哈哈,你真有趣:System.Windows.Forms.WebBrowser
  • 这在 C# 语言规范中没有定义。严格来说这个问题也和英语有关,但你也不应该用英语来标记这个问题。 C# 或英语无法帮助您解决非语言问题。

标签: c# winforms focus webbrowser-control lost-focus


【解决方案1】:

为什么需要点击这个按钮?它正在发送一些表格? 如果是,可以使用WebClient,模拟发送表单,无需图形界面。

基本上,几乎任何重要的事情都需要使用Get Postmultipart/post 连接到网站,所以WebClient 将是完美的。您可以简单地获取此按钮所在的站点并对其进行解析以了解单击它的作用。然后模拟自己的动作。

【讨论】:

    【解决方案2】:

    在 IE7 或更高版本中,您可以在 webbrowser 站点上实现 IProtectFocus 并拒绝焦点更改。如果您使用支持这种自定义的原始 ActiveX 或其包装器,您会更好,例如csexwb。如果非要使用winform webbrowser控件,需要create your own webbrowser site

    【讨论】:

    • 我没有使用 iexplorer.exe 或任何“真正的”浏览器。我正在使用 .Net Framework 4.0 beta 之外的 System.Windows.Forms.WebBrowser 控件。
    • 我也不是在谈论其他浏览器。 webbrowser 站点是 System.Windows.Forms.WebBrowser 中的一个嵌套类。
    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2012-11-04
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2015-01-05
    相关资源
    最近更新 更多