在我的WPF应用程序中,我有多个类implements a message loop。当我创建这些类的对象时,所有这些消息循环然后并行运行。这些对象有时可能会显示一个对话框。主应用程序线程必须密切关注这些对象,并确保它们都没有被对话框卡住(如果确定了这种情况,请按取消(退出键))。确定线程的活动前台窗口的正确方法是什么?我知道有一个GetForegroundWindow()
API,但看起来好像它在系统级而不是线程级工作。
答案 0 :(得分:2)
没有每线程活动前台窗口这样的东西。所以你明确要求的是没有答案。
可能至少使用Win32的正确方法是使用EnumWindows
枚举顶级窗口。然后使用GetWindowThreadProcessId
标识窗口与您的某个线程相关联。最后使用GetClassName
标识窗口是文件对话框。然后随意做你想做的任何卑鄙的事情!
另一方面,这听起来像UIAutomation的完美候选人。您正在自动测试UI。 UIAutomation将能够找到这些文件对话框窗口并按下它们上的按钮。