我目前正在使用委托每隔几毫秒从当前关注的外部表单轮询当前的活动控件,这很糟糕。
答案 0 :(得分:0)
问题的标题有些令人困惑,因为这实际上与Application.OpenForms
没有任何关系。该属性只公开了所有当前打开的表单的集合。如果打开以前未打开的新表单,则会将其添加到集合中。但是操作系统在桌面上一次只允许一个活动窗口,因此您真正想要的是在活动窗口更改时收到通知。轮询将为此工作,但这不是一个好的解决方案。
您需要安装a global hook(WH_CBT可能是您想要的那个),或者利用用于辅助功能工具的WinEvents基础设施(通过SetWinEventHook function)。当活动窗口发生变化时,这两个都会为您提供通知。当然,它们的范围不仅限于您正在测试的应用程序。当桌面上的活动窗口更改为任何其他窗口时,您将收到通知。您可以将其过滤到您关注的应用程序。
我目前没有时间将任何所需的代码翻译成C#/ .NET,但是一旦你知道要搜索什么,你就可以在网上找到它。此外,WinEvents已经包含在System.Windows.Automation
namespace。