如何判断WINDOWS程序窗口是否无响应


SendMessageTimeout()

将指定的消息发送到一个或多个窗口。

此函数的原理是向一个待测试窗口发送消息,并期待返回值,如果没有返回值则说明窗口无响应。

函数原型:

LRESULT SendMessageTimeoutA(
  HWND       hWnd,
  UINT       Msg,
  WPARAM     wParam,
  LPARAM     lParam,
  UINT       fuFlags,
  UINT       uTimeout,
  PDWORD_PTR lpdwResult
);


参数1:要测试窗口的窗口句柄。

参数2:要发送的消息。

参数3:任何其他特定于消息的信息。

参数4:任何其他特定于消息的信息。

参数5:这个函数的行为。此参数可以是以下一个或多个值。


值:SMTO_ABORTIFHUNG   含义:如果接收线程似乎没有响应或“挂起”,则函数返回而不等待超时时间过去。

值:SMTO_BLOCK   含义:阻止调用线程处理任何其他请求,直到函数返回。

值:SMTO_NORMAL   含义:在等待函数返回时,不会阻止调用线程处理其他请求。

值:SMTO_NOTIMEOUTIFNOTHUNG   含义:只要接收线程正在处理消息,该功能就不会强制执行超时期限。

值:SMTO_ERRORONEXIT   含义:如果接收窗口被销毁或其拥有的线程在处理消息时死亡,则该函数应返回0。

参数6:超时时间的持续时间,以毫秒为单位。如果消息是广播消息,则每个窗口可以使用完整的超时时段。例如,如果指定五秒超时时间并且有三个顶级窗口无法处理该消息,则最多可能有15秒的延迟。

参数7:消息处理的结果。此参数的值取决于指定的消息。 一个DWORD型数据,用于接收返回值。


例:

DWORD vers;

LRESULT millio=SendMessageTimeout(peop,WM_NULL,0,0,SMTO_ABORTIFHUNG,3000,&vers);


经过几次测试只有参数5填"SMTO_ERRORONEXIT"时测试窗口是否响应时结果正确,其他选项以及选项的组合测试结果与实际不符,有待于进一步使用。参数5是可以使用"SMTO_ABORTIFHUNG|SMTO_BLOCK"的形式来选择多个值。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值