问一个难倒所有编程高手的问题:Windows下怎么通过代码判断一个进程真的彻底没响应了?

解决方案 »

  1.   

    可以使用Windows API函数: IsHungAppWindow (user32.dll),判断应用程序是否响应。不过,MSDN提示此函数可能会在后续版本中更改或删除,最好做好判断。 SendMessageTimeout 函数发送WM_NULL消息也可以判断窗口是否响应。
      

  2.   

    SendMessageTimeout 函数发送WM_NULL消息可能会误判
      

  3.   

    这两种方式都是MSDN提到的,是比较简洁的。响应不响应的界限不是那么泾渭分明,如果有误判就得分多种情况,临界值需要自己调。软件都是不断更新发展的,没那么多一劳永逸的法。判断连接是不是响应,直接去连接判断返回值是最简便的方法。
      

  4.   

    用这个IsHungAppWindow
      

  5.   

    枚举进程,获得进程ID,WaitForSingleObject不断的判定进程是否存在
      

  6.   

    进程ID不存在了还好说,但要是进程ID存在实际进程已无响应,这个才是本帖所要解决的问题。
      

  7.   

    这恐怕已经不是一个实际程序问题了。最近看到一个技术论坛上有人提了一个问题:怎样创建一个能被所有语言调用的dll,结果被编辑关闭了。原因是它不是一个具体问题,它含糊不清、过于宽泛、不完整。
    一个有辨别力的问题应该有边界和可证伪性,并且是可验证的和操作主义的。所以应该先理清概念,构造出需要解决的那个具体问题情景。