我正试图使用C#/ .NET 4.0自动化外部应用程序的GUI。确定应用程序是否被阻止/忙碌?
正在自动化(AUT)的应用程序是一个VB6应用程序。
在做一个动作,或者点击一个按钮时,AUT有时会花费大量的时间等待DB回应。当应用程序正在等待数据库结果时,应用程序本身是空闲的(不会注册太多CPU使用率),但它被阻止(您不能单击或与其交互)。
- 所以到目前为止,我试图看着鼠标指针(沙漏)作为指标,但有时该应用被堵塞,但光标是正常的。所以这是不可靠的。我试过看过AUT的TotalProcessorTime(这个措施,如果应用程序是IDLE或BUSY)的主要过程,但正如我所说,有时应用程序是IDLE,仍然被阻止。
所以我想磁带到计算器人群的经验,看是否有人已经知道如何处理,以及/或者如果你有关于如何实现这一目标的任何想法。
感谢
编辑:
我一直在玩弄,只是发现了一些。
虽然AUT被阻塞,它没有响应键盘或鼠标输入。但是,如果我将WM_LBUTTONCLICK消息发送到窗口,我可以确认消息正在处理(以及UI更改)。
所以我猜他们是有意阻止应用程序,同时使DB调用。
UI是否被禁用?主UI线程是否在工作线程上阻塞?如果您尝试与应用程序交互,您是否看到窗口重影? –
您无法与主用户界面进行交互,但是我不认为主用户界面线程被阻止,因为您尝试与其交互时看不到任何“重影”。它只是没有做任何事情。所有的控件/ UI仍然“启用”。 – DanyO
使用Spy ++检查主窗口是否被禁用。如果消息队列正在被抽取,并且您无法调用UI操作,那么我猜测,AUT中的某些内容必须被禁用。 –