问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

脚本开发教程脚本分享:如何用按键精灵判断窗口是否无响应或卡屏呢?_百 ...

发布网友 发布时间:2024-03-28 09:24

我来回答

2个回答

热心网友 时间:2024-06-12 19:03

我记得无响应的窗口类型会变成Ghost型

热心网友 时间:2024-06-12 18:56

开开心心做设计,敲代码
顺顺利利调试运行,美滋滋的上万行代码,遛遛的通过了语法检查
咦,突然不动了......
卡……卡屏了么。。。窗口无响应。。。。程序停止运行。。。浏览器崩溃。。TMD在逗我。。

窗口无响应,卡屏,浏览器崩溃……一直是脚本作者们头疼的问题。大多数人在遇到无响应等问题的时候,如果是重要的数据只能选择等待,忍无可忍时强制关闭程序。可是,下一次遇到无响应问题该怎么办呢?如何一劳永逸解决这个头疼点呢?

知识拓展
疑问:为什么会出现卡屏、窗口无响应等情况呢?
电脑卡屏、窗口无响应的原因很多,针对脚本作者,可能有如下原因造成:
1. 硬件配置问题
如:硬盘坏道、cpu过热等等(扫描硬盘、检查CPU风扇)
还有可能是驱动不兼容问题(扫描显卡或其他驱动,判断是否是最适应的)
2. 内存消耗问题
程序运行时,消耗的内存太大,导致窗口无响应、卡屏等情况发生。(更换内存,加大内存)
3. 电脑机箱长期未清理
电脑机箱里面内存条进灰尘,拆开机箱,拆下内存条,清洁下内存金手指(用橡皮擦擦拭,或者用浸泡过酒精,拧干的湿布),重新装回去,就可能可以了。

解决方案:
'方案一:API
Private Declare Function IsHungAppWindow Lib "user32.dll" ( ByVal hWnd As Long) As Long
Hwnd = Plugin.Window.Find(0, "无")
TracePrint Hwnd
Do
If IsHungAppWindow(Hwnd)=0 Then
i=0'窗口正常,次数归零
TracePrint "窗口正常"
Else
i=i+1
If i = 60 Then'如果窗口未响应60次,就弹出窗口
MsgBox "窗口未响应"
End If
End If
Delay 1000
Loop

思路解析:以上方法通过调用系统win32的窗口通用控制类API:IsHungAppWindow,用来检测窗口是否为未响应。
通过要判断的窗口的句柄,进行IsHungAppWindow检测。若检测到窗口响应,则说明窗口正常响应,返回消息“窗口正常”。若检测到窗口无响应,则返回消息“窗口未响应”。

'方案二:发消息
'给程序发消息,得到回应则说明有响应
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
Cjb = FindWindow(vbNullString, 要检测进程窗体的标题名)
Qqq = SendMessageTimeout(Cjb, WM_NULL, 0, 0, SMTO_ABORTIFHUNG And SMTO_BLOCK, 3000, lngResult)
If Qqq = 0 Then
TracePrint "进程不正常"
else
TracePrint "进程正常"
end if

注:Cjb = FindWindow(vbNullString, 要检测进程窗体的标题名),这里需要用双引号输入要检测进程窗体的标题名,例如"按键精灵"。

思路解析:以上方法调用了2个系统API。
调用系统API:findwindow,该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。
调用系统API:SendMessageTimeout,该函数将指定的消息发送到一个或多个窗口。
通过给进程窗体发消息来判断窗口是否响应是否正常。若能检测到进程窗体的标题,则返回“进程正常”,若检测不到,则返回“进程不正常”。
注:Qqq = SendMessageTimeout(Cjb, WM_NULL, 0, 0, SMTO_ABORTIFHUNG And SMTO_BLOCK, 3000, lngResult)这里的3000是延迟时间,程序运行到这一段的时候,软件会有3s的延迟时间。这个参数的设置,大大们可以根据自己电脑的配置来进行设置哦。要是配置ok,反应迅速,500的延迟也就够了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 小米手机清空数据后设备被锁定,小米账号密码忘记,提示要连wifl,又... ...然后用小米账号登陆设备管理清除数据后可以开机吗 怎样求三角函数的度数 PT官网投诉哪个英雄说:我爱我的武器,因为它和我所爱的音乐一样,都是... ...但领导请了一个星期假去旅游,怎么办,我这周就想走人 申通快递邮东西时她们给东西包装盒也要计到东西重量中吗 拒绝过你的男人,会在开会时隔着玻璃看着门外的你。对视也不移开眼神... 我养了一只乌龟,这几天每到早上四点半就开始扑腾,这是怎么回事... 所谓的燃脂减肥有效吗? 准备入坑,请教下乌龟到底是粗养好,还是精养好 要给一种解乏解困的饮料取名,规定为:《_花_草露》,大家帮忙想想,谢谢... 乌龟要在什么时候下蛋 孵化又需要多长时间261 仙花神草中华骨康是什么药 仙花神草纯植物精油眼部排毒排毒怎样 乌龟挖坑是什么回事1 仙花神草精油的作用 职业学校教学工作总结怎么写 肇庆自驾游到温州洞头·大沙岙要几个小时 泉州开车到温州洞头·大沙岙路线选择 ...我买了好几家公司的医保,若是住院了,怎样能报销多份保险? C++如何调用按键精灵中的dll文件,比如大兵插件,DBSoft.dll。_百度... 摩托车机油多了,离合器片会出现分离不彻底的现象吗 摩托车机油粘度大小对离合的影响 求文档: 摩托车机油加太满会使离合器打滑吗 为什么乌龟晚上放在盒子里总是用爪子刮盒子?5 乌龟总是趴在盒子的边缘,这样算死吗? 我的乌龟总想爬出盒子,怎么会事?6 我家乌龟不停四肢的乱刮又像再洗脸为什么? 乌龟最近很急躁,晚上扒盒子,像是要出来,放在地上,爬得很快,... 小乌龟总是爬着盆子边往上爬是怎么回事?88 不允许背包进入车间和进入车间不允许背包进入车间是不是一个意思?_百... 企业对外销售应税产品应该交纳的资源税应计入生产成本科目 对么... ...按规定应交纳的资源税计入相关资产成本,是否正确? tfboys的所有歌的发布时间是什么 余承东是不是华为老板 wow 进时光之穴要完成就萨尔的任务?从哪领,怎么做? WOW塔蕾莎的计谋任务怎么引爆燃烧弹[急] 塔蕾莎的计谋怎么做啊 魔兽世界塔蕾莎的计谋任务做到最后为什么别人点NPC可以传出去... 工商银行的卡可以直接给邮政储蓄卡汇钱吗?可以在工商银行汇钱吗?手续费...