[已解决]如何检测窗口在闪烁?(指WinFlash那种效果)
本帖最后由 alwaystick 于 2016-3-13 22:49 编辑我有一个监控软件报警的时候窗口会闪烁(WinFlash那种效果),请问怎样才能检测这个窗口正在闪烁?
像图片中记事本这样子闪烁
WinGetState() WinGetState()
Huiseyu 发表于 2016-3-12 19:22 http://www.autoitx.com/images/common/back.gif
请问具体是哪个值,我看了帮助,不懂是哪个,万分感谢指教!
1 = 窗口存在
2 = 窗口可见
4 = 窗口激活
8 = 窗口处于活动状态
16 = 窗口最小化
32 = 窗口最大化 具体值需要Get你的那个窗口的几种状态才知...所以就没写..
我也不大会,也没测试环境,我是这样想的
get窗口的状态值,并计数
当次数到达某个值以上(标题闪烁次数),清零.... 回复 4# Huiseyu
我想可能要调用哪个Windows API来检测窗口的状态。百度了很多,找不到有关这种窗口闪烁的资料。 回复Huiseyu
我想可能要调用哪个Windows API来检测窗口的状态。百度了很多,找不到有关这种窗口闪烁的资 ...
alwaystick 发表于 2016-3-12 22:23 http://www.autoitx.com/images/common/back.gif
我本身就不懂这些,打发时间玩玩的,API了解程度为0,呵呵 用 WinGetState() 应该可以
WinFlash 本来就是让窗口有规律间隔时间的进行激活与非激活的状态,用 WinGetState() 在目标窗口激活状态发生变化时连续获取其状态,看是否符合激活与非激活的切换规律 本帖最后由 alwaystick 于 2016-3-13 17:37 编辑
回复 7# afan
用下面代码试验记事本(新开的记事本窗口,没有其它以 无标题 为开头的窗口标题干扰)BitAND(WinGetState("无标题",""),4)试验发现记事本无论有没有WinFlash,AutoIt都会判断记事本窗口已经被激活,无法分辨窗口是否在闪烁。
还试了下面的代码BitAND(WinGetState("无标题",""),8)虽然是做到了WinFlash之后AutoIt才提示窗口正在闪烁,但是闪烁结束后AutoIt还继续误判窗口还在闪烁??(也就是说WinFlash后窗口状态有8了,但是闪烁完了状态还是8)
是不是哪里代码写的不对? 回复 8# alwaystick
我觉得你用PixelChecksum函数比较好解决 回复afan
用下面代码试验记事本(新开的记事本窗口,没有其它以 无标题 为开头的窗口标题干扰)试验发现 ...
alwaystick 发表于 2016-3-13 17:32 http://www.autoitx.com/images/common/back.gif
检测一次就判断?请仔细看回复 本帖最后由 alwaystick 于 2016-3-13 19:37 编辑
回复 10# afan
抱歉,是我忘记说了。我有用While循环检测,比如下面这段代码
While 1
If BitAND(WinGetState("无标题",""),8) Then
MsgBox(0,"窗口在闪烁")
EndIf
Sleep(50)
WEnd
表现就是闪烁完了AutoIt还继续弹MsgBox。 回复 9# love008
感谢回复!不过,这个方法比较敏感,容易误判。因为我的监控软件是挂在电脑上的,有人去用,不是无人值守的。一旦有人去用(如点击任务栏上的监控软件按钮),像素校验和可能变化,就很可能造成误判。 回复 12# alwaystick
那么,如你所说,有这么多人操作主机,就算检测到,都会被被点击改变状态。你的最终结果都不准确。那么需要换思路! 回复 1# alwaystick
Hook FlashWindowEx 这个API, 取出结构体数据, 判断窗口hwnd是否是目标窗体. 如果是 则真, 否则假. 回复 14# lanfengc
目前也就这个方法最可靠了!十分感谢!
页:
[1]