【问题标题】:Programmatically, how does this application detect that a program is ready for input以编程方式,此应用程序如何检测程序已准备好输入
【发布时间】:2013-01-09 16:52:17
【问题描述】:

我需要构建一个小型 C# 应用程序,用于测量可定义应用程序的启动时间。我找到了这个免费工具:

http://www.passmark.com/products/apptimer.htm

这正是我需要的,但我被要求创建一个更具体的公司内部版本,因​​为我们需要数据库日志记录和其他一些东西。

我了解如何复制除“输入空闲”之外的所有功能。我试图搜索这个词,但我没有找到任何有用的参考资料。谁能指出我检查应用程序“输入空闲”状态的正确方向?

【问题讨论】:

    标签: c# .net windows


    【解决方案1】:

    它指的是 Windows WaitForInputIdle API,当应用程序进入空闲消息循环状态时,它会回调您:

    http://blogs.msdn.com/b/oldnewthing/archive/2010/03/25/9984720.aspx

    【讨论】:

    • 好极了,一模一样。
    【解决方案2】:

    你可以打电话

    WaitForInputIdle( ProcessInfo.hProcess, INFINITE );
    

    等到指定进程完成其初始输入的处理并等待用户输入而没有待处理的输入,或者直到超时间隔已过。

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms687022(v=vs.85).aspx

    http://www.codeproject.com/Articles/137/Sending-a-message-to-the-Main-Frame-Window-of-Anot

    【讨论】:

    • 好极了,一模一样。
    • @EtherDragon 最初没有达到最低时间限制。我标记了另一个答案纯粹是因为用户的代表较低并且答案是同时发布的。
    【解决方案3】:

    System.Diagnostics 有一个名为 Process.WaitForInputIdle() 的方法,它将检查进程是否空闲。

    注意:这仅适用于具有某种接口(和消息循环)的程序。

    MSDN for WaitForInoutIdle()

    Check this previous question 一个很好的例子让你开始 - 你需要做的就是添加 idle 方法,并连接目标进程:

    Also check this 提供一些关于如何实际检查目标应用程序是否有接口的好建议。不过,您可能不需要它,因为您可能正在使用已知的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      相关资源
      最近更新 更多