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

标签 c# .net ui-automation

我正在尝试使用 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/

相关文章:

c# - 无法加载 ps1,因为在此系统上禁用了运行脚本

c# - 如何声明一个泛型类型的泛型约束

c# - 在 C# .NET Core 的断言有效负载中使用自定义数据为第 3 方应用程序创建 SAML 断言

c# - .NET 相当于 Java NIO 选择器

ios - UIAutomation isValid() 立即替代方案

Android & Robotium - 测试 fragment 是否出现?

c# - 我如何检查属性在更新之前是否实际更改

C# FIPS 140-2 加密

.net - 将未使用的默认程序集留在引用文件夹中不好?

selenium-webdriver - 如何使用 WebDriver 自动化 Ace Editor(发送 key )?