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"的形式来选择多个值。