如何判断窗口是否正在接收输入(不显示模态对话框等)

时间:2011-12-20 19:39:30

标签: c# winforms pinvoke

我将通过暴露网络管道让我的应用程序从另一个应用程序自动化。基本上,应用程序B将模拟作为使用应用程序A的用户,这是一个WinForms应用程序。

到目前为止,我唯一的问题是,如果您是真正的用户,我不希望应用程序B能够访问您无法访问的功能,例如在存在时单击表单中的按钮消息框或顶部的模式对话框。这应该让我保持安全,同时仍然让应用程序B完全控制应用程序A.

我要做的是用自定义代码覆盖MessageBox.Show,以及每次调用应用程序A中的任何ShowDialog,将一些全局布尔值设置为false,同时显示模态对话框,告诉它目前是否可以访问主表格。然后我可以让应用程序B等待或返回错误。

但是,不是我的解决方案,是否有一些内置的方式来判断表单是否有顶部对话框?我尝试了'主动','聚焦',甚至是原生的GetForegroundWindow,但它们都没有按照我的需要工作。首先,如果我的应用程序被最小化,那么所有这些都将是假的,这是我不想要的。

1 个答案:

答案 0 :(得分:2)

模态对话框禁用其所有者,因此一个简单的测试是检查窗口是否已启用。使用IsWindowEnabled来确定这一点。您还需要使用IsWindowVisible检查窗口是否可见。