找回密码
 加入
搜索
查看: 3377|回复: 14

[GUI管理] [已解决]如何检测窗口在闪烁?(指WinFlash那种效果)

 火.. [复制链接]
发表于 2016-3-12 17:56:39 | 显示全部楼层 |阅读模式
本帖最后由 alwaystick 于 2016-3-13 22:49 编辑

我有一个监控软件报警的时候窗口会闪烁(WinFlash那种效果),请问怎样才能检测这个窗口正在闪烁?
像图片中记事本这样子闪烁

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-3-12 19:22:54 | 显示全部楼层
WinGetState()
 楼主| 发表于 2016-3-12 20:07:27 | 显示全部楼层
WinGetState()
Huiseyu 发表于 2016-3-12 19:22

请问具体是哪个值,我看了帮助,不懂是哪个,万分感谢指教!

1 = 窗口存在
    2 = 窗口可见
    4 = 窗口激活
    8 = 窗口处于活动状态
    16 = 窗口最小化
    32 = 窗口最大化
发表于 2016-3-12 20:21:15 | 显示全部楼层
具体值需要Get你的那个窗口的几种状态才知...所以就没写..
我也不大会,也没测试环境,我是这样想的
get窗口的状态值,并计数
当次数到达某个值以上(标题闪烁次数),清零....
 楼主| 发表于 2016-3-12 22:23:15 | 显示全部楼层
回复 4# Huiseyu
我想可能要调用哪个Windows API来检测窗口的状态。百度了很多,找不到有关这种窗口闪烁的资料。
发表于 2016-3-13 07:18:57 | 显示全部楼层
回复  Huiseyu
我想可能要调用哪个Windows API来检测窗口的状态。百度了很多,找不到有关这种窗口闪烁的资 ...
alwaystick 发表于 2016-3-12 22:23



    我本身就不懂这些,打发时间玩玩的,API了解程度为0,呵呵
发表于 2016-3-13 14:38:56 | 显示全部楼层
用 WinGetState() 应该可以
WinFlash 本来就是让窗口有规律间隔时间的进行激活与非激活的状态,用 WinGetState() 在目标窗口激活状态发生变化时连续获取其状态,看是否符合激活与非激活的切换规律
 楼主| 发表于 2016-3-13 17:32:41 | 显示全部楼层
本帖最后由 alwaystick 于 2016-3-13 17:37 编辑

回复 7# afan
用下面代码试验记事本(新开的记事本窗口,没有其它以 无标题 为开头的窗口标题干扰)
BitAND(WinGetState("无标题",""),4)
试验发现记事本无论有没有WinFlash,AutoIt都会判断记事本窗口已经被激活,无法分辨窗口是否在闪烁。
还试了下面的代码
BitAND(WinGetState("无标题",""),8)
虽然是做到了WinFlash之后AutoIt才提示窗口正在闪烁,但是闪烁结束后AutoIt还继续误判窗口还在闪烁??(也就是说WinFlash后窗口状态有8了,但是闪烁完了状态还是8)
是不是哪里代码写的不对?
发表于 2016-3-13 18:21:02 | 显示全部楼层
回复 8# alwaystick


    我觉得你用PixelChecksum函数比较好解决
发表于 2016-3-13 18:39:04 | 显示全部楼层
回复  afan
用下面代码试验记事本(新开的记事本窗口,没有其它以 无标题 为开头的窗口标题干扰)试验发现 ...
alwaystick 发表于 2016-3-13 17:32



    检测一次就判断?请仔细看回复
 楼主| 发表于 2016-3-13 19:35:34 | 显示全部楼层
本帖最后由 alwaystick 于 2016-3-13 19:37 编辑

回复 10# afan
抱歉,是我忘记说了。我有用While循环检测,比如下面这段代码
While 1
If BitAND(WinGetState("无标题",""),8) Then
MsgBox(0,"窗口在闪烁")
EndIf
Sleep(50)
WEnd

表现就是闪烁完了AutoIt还继续弹MsgBox。
 楼主| 发表于 2016-3-13 19:49:25 | 显示全部楼层
回复 9# love008
感谢回复!不过,这个方法比较敏感,容易误判。因为我的监控软件是挂在电脑上的,有人去用,不是无人值守的。一旦有人去用(如点击任务栏上的监控软件按钮),像素校验和可能变化,就很可能造成误判。
发表于 2016-3-13 20:26:04 | 显示全部楼层
回复 12# alwaystick

那么,如你所说,有这么多人操作主机,就算检测到,都会被被点击改变状态。你的最终结果都不准确。那么需要换思路!
发表于 2016-3-13 21:42:59 | 显示全部楼层
回复 1# alwaystick


  Hook   FlashWindowEx 这个API, 取出结构体数据, 判断窗口hwnd是否是目标窗体. 如果是 则真, 否则假.

评分

参与人数 1金钱 +10 收起 理由
alwaystick + 10

查看全部评分

 楼主| 发表于 2016-3-13 22:49:01 | 显示全部楼层
回复 14# lanfengc
目前也就这个方法最可靠了!十分感谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-18 13:43 , Processed in 0.091192 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表