我正在尝试使用 C#/.NET 4.0 自动化外部应用程序的 GUI
被自动化 (AUT) 的应用程序是一个 VB6 应用程序。
在执行操作或单击按钮时,AUT 有时会花费大量时间等待 DB 响应。当应用程序等待数据库结果时,应用程序本身处于空闲状态(没有记录太多 CPU 使用率),但它被阻止了(您无法点击它或与之交互)。
-到目前为止,我已经尝试将鼠标指针(沙漏)视为指示器,但有时应用程序被阻止但光标正常。所以这不可靠。
-我已经尝试查看 AUT 的主进程以获得 TotalProcessorTime(这可以衡量应用程序是空闲还是忙碌),但就像我说的,有时应用程序是空闲的,但仍然被阻止。
所以我想了解一下 stackOverflow 人群的经验,看看是否有人已经知道如何处理它,和/或您是否对如何实现它有任何想法。
谢谢
编辑:
我一直在玩,刚刚发现了一些东西。
虽然 AUT 被阻止,但它不会响应键盘或鼠标输入。但是,如果我向窗口发送 WM_LBUTTONCLICK 消息,我可以确认消息正在处理(并且 UI 发生变化)。
所以我猜测他们在进行数据库调用时有意阻止应用程序。
最佳答案
您可以检查该应用程序的用户界面是否有响应:
获取该应用程序的流程实例并检查其Responding
属性。喜欢:
//To get the process instance
Process application = null;
foreach (var process in Process.GetProcesses())
{
if (process.ProcessName == "The Process Name")
{
application = process;
break;
}
}
//to check if the process UI is not responding
if (application.Responding)
{
//
}
编辑:您可以修改application.Responding
使用的超时检查this .
关于c# - 确定应用程序是否被阻止/忙碌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713916/