确定应用程序是否被阻止/忙碌?

时间:2011-07-15 22:40:49

标签: c# .net ui-automation

我正在尝试使用C#/ .NET 4.0自动化外部应用程序的GUI

自动化的应用程序(AUT)是一个VB6应用程序。

当执行操作或单击按钮时,AUT有时会花费大量时间等待DB响应。当应用程序等待数据库结果时,应用程序本身处于空闲状态(不会注册太多CPU使用率),但它被阻止(您无法单击或与之交互)。

- 到目前为止,我已经尝试将鼠标指针(沙漏)作为指示器,但有时应用程序被阻止但光标正常。所以这不可靠。

- 我已经尝试过查看TotalProcessorTime的AUT的主要流程(这可以衡量应用程序是IDLE还是BUSY),但就像我说的那样,有时应用程序是IDLE,仍然被阻止。

所以我想把stackOverflow人群的经验录下来,看看是否有人已经知道如何处理,和/或如果你对如何实现这一点有任何想法。

由于

编辑:

我一直在玩,只是发现了一些东西。

当AUT被阻止时,它没有响应键盘或鼠标输入。但是,如果我将WM_LBUTTONCLICK消息发送到窗口,我可以确认消息正在处理(并且UI更改)。

所以我猜他们在进行数据库调用时故意阻止了应用程序。

1 个答案:

答案 0 :(得分:3)

您可以检查该应用程序的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使用的超时时间。