通过系统底层的函数,检测一个窗口(如记事本)是否响应。如果窗口在规定的时间内没有响应,代码会弹出提示,告诉用户“未响应”;如果窗口有响应,则会显示“正常响应”。
; 简易版【缺少时间设置,待验证】 ; SendMessage, 0x0, 0, 0,, ahk_class Notepad ; if ErrorLevel ; Msgbox 未响应1 ; else ; Msgbox 正常响应1 ; ================================================================= if DllCall("SendMessageTimeout", "UInt", WinExist("ahk_class Notepad"), "UInt", 0x0000, "Int", 0, "Int", 0, "UInt", 0x0002, "UInt", 100, "UInt *", 0) Msgbox 正常响应2 else Msgbox 未响应2 ; 函数版 检测程序是否未响应(WinTitle) { ; WinActivate, %WinTitle% WinGetTitle, 获取窗口标题, %WinTitle% if (InStr(获取窗口标题, "(未响应)")!=0) Return False if DllCall("SendMessageTimeout", "UInt", WinExist(WinTitle), "UInt", 0x0000, "Int", 0, "Int", 0, "UInt", 0x0002, "UInt", 100, "UInt *", 0) Return True ; 正常响应 else Return False ; 未响应 } ; ================================================================= NR_temp := 0 ; init TimeOut := 100 ; 在决定它没有响应之前要等待几毫秒 - 在100%的使用下,100毫秒似乎是可靠的。 ; WM_NULL =0x0000 ; SMTO_ABORTIFHUNG =0x0002 WinGet, wid, ID, ahk_class Notepad ; 检索要检查的窗口的ID Responding := DllCall("SendMessageTimeout", "UInt", wid, "UInt", 0x0000, "Int", 0, "Int", 0, "UInt", 0x0002, "UInt", TimeOut, "UInt *", NR_temp) if Responding = 1 ; 1= 正常响应, 0 = 未响应 Msgbox 正常响应3 else Msgbox 未响应3
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)