我需要从我的控制台应用程序打开Firefox,用它做一些事情,然后在几分钟后关闭它。
我正在使用Process.Start(“firefox.exe”,“myurl”);打开firefox,这不是问题。问题在于关闭它。
CloseMainWindow()函数通常可以正常工作,但是如果firefox打开了模态窗口(如“下载失败”消息框),它就不起作用。在这种情况下,我可以在进程上调用Kill(),但这看起来很脏。
另外,如果我在进程上调用Kill(),那么下次firefox打开时会打开一个“会话恢复”选项卡,这并不酷。我可以尝试禁用会话还原功能,这将解决该问题。但是,我仍然担心杀死这样的ffx可能会导致其他问题。
有谁知道这样做的好方法?是“最干净”的方法尝试和pinvoke获取模态窗口句柄,关闭它,然后重试CloseMainWindow()?
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
可能Using Windows APIs from C#, again! CodeProject article in Sending Messages to another window会有所帮助。
答案 2 :(得分:0)
AutoIt有一个名为AutoItX的COM库,它可以帮助您轻松可靠地处理来自其他进程的操作窗口,包括关闭它们......
它主要是一种脚本语言,因此如果您对使用.Net中的COM不满意,您还可以将AutoIt脚本编译为EXE并从.Net应用程序运行。