1

我需要从我的控制台应用程序中打开 Firefox,对其进行处理,然后在几分钟后将其关闭。

我正在使用 Process.Start("firefox.exe", "myurl"); 打开Firefox,这不是问题。问题在于关闭它。

CloseMainWindow() 函数通常可以工作,但如果 Firefox 有一个打开的模式窗口(如“下载失败”消息框),它就不起作用。在这种情况下,我可以在进程上调用 Kill(),但这似乎很脏。

另外,如果我在进程中调用 Kill(),那么下次打开 firefox 时,会打开一个“会话恢复”选项卡,这并不酷。我可以尝试禁用会话恢复功能,这可以解决这个问题。但是,我仍然担心像这样杀死 ffx 可能会导致其他问题。

有谁知道这样做的好方法?尝试和 pinvoke 以获取模式窗口句柄,关闭它,然后重试 CloseMainWindow() 是“最干净”的方法吗?

4

3 回答 3

4

也许watin可以帮助你

public void SearchForWatiNOnGoogle()
{
    using (var browser = new Firefox("http://www.google.com"))
    {
        browser.TextField(Find.ByName("q")).TypeText("WatiN");
        browser.Button(Find.ByName("btnG")).Click();
        browser.Close();

     }
  }
于 2010-07-30T18:00:19.213 回答
0

可能再次使用 C# 中的 Windows API!将消息发送到另一个窗口中的 CodeProject 文章会有所帮助。

于 2010-07-30T17:22:10.570 回答
0

AutoIt 有一个名为 AutoItX 的 COM 库,它可以帮助您轻松可靠地处理来自其他进程的窗口操作,包括关闭它们...

它主要是一种脚本语言,因此如果您对使用 .Net 中的 COM 不满意,您还可以将 AutoIt 脚本编译为 EXE 并从您的 .Net 应用程序中运行。

http://www.autoitscript.com/

于 2010-07-30T18:30:23.663 回答