2012-05-08 46 views
0

我对C#很新,但我很快就学会了。我已经看到了各种各样的答案,但我不确定他们的套件,或者我只是没有得到它们。等待应用程序窗口打开然后执行某些操作

我有一个业务需求,写一个c#应用程序,在系统托盘中的网站,并在Internet Explorer中执行特定操作时运行。这个动作(现在)是关于Internet Explorer窗口的开始。我需要应用程序不断监视以查看此窗口是否已打开,然后运行一些代码,一个示例将关闭窗口并显示一个消息框。

我已经设法让系统托盘部分工作,我将如何去监控窗口存在?

编辑 回答一些注释中的问题: 在我们使用仅在IE中运行的订票系统的工作,我们正在寻找一种方法来自动化我们的手工工艺的一部分,要做到这一点,我们是认为我们可以有以下过程: 去预订,点击帮助>关于,系统托盘应用程序关闭窗口并运行一些代码来更新数据库。这是非常多的。

我不得不看看以下一些: How to check if window is opned and close it c#: How do check if another application window is open on my machine (i.e., iterate through all open windows)?

我想我明白,我必须通过正在运行的进程看,检查有相关的计划性,看它是否具有正确的窗口名称?我确定我可以得到它的工作(最终),但它是等待窗口打开我坚持的部分,C#有waitfor或我必须编写一个函数来不断检查该窗口是否打开?

编辑

我已经接受了@阿德里安的答案,因为它看起来像它会想得到我想要的;然而,在阅读所有评论后,我去了我的经理,我们讨论了这一点。现在,我们将通过右键菜单中的文本框,让用户输入预订号码到自己的C#应用​​程序中。谢谢大家。

+0

为什么要你的应用程序有权使用由*另一*应用程序打开窗户烂摊子? –

+1

你有什么尝试?你见过的答案有什么问题?你见过的答案是什么?他们为什么不为你工作? –

+1

这就是... *绝对*我曾经听说过的一个应用程序中最奇怪的行为。如果你想自动执行任务,只需给用户一个按钮来点击。不要将其绑定到关键系统功能。当IT需要查看机器上运行的IE版本时会发生什么?他们去帮助 - >关于,突然间,东西开始自动预订。哎呦! –

回答

0

你可能想使用FindWindowEx API调用

看到这里的示例代码:

http://www.pinvoke.net/default.aspx/user32/findwindowex.html

然后SendMessage函数关闭该窗口。

http://www.pinvoke.net/default.aspx/user32/SendMessage.html

但你将被限制在什么样的事件,你可以捕捉从其他应用程序/应用......出于安全原因。除非应用程序明确允许这种交互。

+0

除了你在答案底部暗示的问题之外,涉及FindWindowEx函数的解决方案还将涉及不断的轮询......如果你关心速度或可靠性,这个解决方案不是一个很好的解决方案。或者防止性能严重下降。 –

0

你可以做的是使用AutoIt。这是一个免费的桌面自动化工具,也提供了一个用于集成的.NET类库。 有了这个,你可以检查并等到某个窗口打开相当容易。

你可以从这里下载此工具: https://www.autoitscript.com

相关问题