我怎么知道我的窗口是否正在接收输入(不显示模态对话框等)

本文关键字:显示 模态 对话框 输入 窗口 我的 是否 我怎么知道 | 更新日期: 2023-09-27 18:18:21

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

到目前为止,我唯一的问题是,我不希望应用程序B能够访问的功能,你将无法访问,如果你是一个实际的用户,像点击按钮在一个表单,而有一个消息框或模态对话框在它的顶部。这样既可以保证我的安全,又可以让应用程序B完全控制应用程序a。

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

但是,而不是我的解决方案,是否有一些内置的方式来告诉窗体是否有一个对话框在顶部?我尝试了"主动","专注",甚至是原生的GetForegroundWindow,但它们都不能满足我的需要。首先,如果我的应用程序被最小化,那么它们都将为假,这是我不想要的。

我怎么知道我的窗口是否正在接收输入(不显示模态对话框等)

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

检查窗口是否可见。