alwaystick 发表于 2016-3-12 17:56:39

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

本帖最后由 alwaystick 于 2016-3-13 22:49 编辑

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

Huiseyu 发表于 2016-3-12 19:22:54

WinGetState()

alwaystick 发表于 2016-3-12 20:07:27

WinGetState()
Huiseyu 发表于 2016-3-12 19:22 http://www.autoitx.com/images/common/back.gif
请问具体是哪个值,我看了帮助,不懂是哪个,万分感谢指教!

1 = 窗口存在
    2 = 窗口可见
    4 = 窗口激活
    8 = 窗口处于活动状态
    16 = 窗口最小化
    32 = 窗口最大化

Huiseyu 发表于 2016-3-12 20:21:15

具体值需要Get你的那个窗口的几种状态才知...所以就没写..
我也不大会,也没测试环境,我是这样想的
get窗口的状态值,并计数
当次数到达某个值以上(标题闪烁次数),清零....

alwaystick 发表于 2016-3-12 22:23:15

回复 4# Huiseyu
我想可能要调用哪个Windows API来检测窗口的状态。百度了很多,找不到有关这种窗口闪烁的资料。

Huiseyu 发表于 2016-3-13 07:18:57

回复Huiseyu
我想可能要调用哪个Windows API来检测窗口的状态。百度了很多,找不到有关这种窗口闪烁的资 ...
alwaystick 发表于 2016-3-12 22:23 http://www.autoitx.com/images/common/back.gif


    我本身就不懂这些,打发时间玩玩的,API了解程度为0,呵呵

afan 发表于 2016-3-13 14:38:56

用 WinGetState() 应该可以
WinFlash 本来就是让窗口有规律间隔时间的进行激活与非激活的状态,用 WinGetState() 在目标窗口激活状态发生变化时连续获取其状态,看是否符合激活与非激活的切换规律

alwaystick 发表于 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)
是不是哪里代码写的不对?

love008 发表于 2016-3-13 18:21:02

回复 8# alwaystick


    我觉得你用PixelChecksum函数比较好解决

afan 发表于 2016-3-13 18:39:04

回复afan
用下面代码试验记事本(新开的记事本窗口,没有其它以 无标题 为开头的窗口标题干扰)试验发现 ...
alwaystick 发表于 2016-3-13 17:32 http://www.autoitx.com/images/common/back.gif


    检测一次就判断?请仔细看回复

alwaystick 发表于 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。

alwaystick 发表于 2016-3-13 19:49:25

回复 9# love008
感谢回复!不过,这个方法比较敏感,容易误判。因为我的监控软件是挂在电脑上的,有人去用,不是无人值守的。一旦有人去用(如点击任务栏上的监控软件按钮),像素校验和可能变化,就很可能造成误判。

love008 发表于 2016-3-13 20:26:04

回复 12# alwaystick

那么,如你所说,有这么多人操作主机,就算检测到,都会被被点击改变状态。你的最终结果都不准确。那么需要换思路!

lanfengc 发表于 2016-3-13 21:42:59

回复 1# alwaystick


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

alwaystick 发表于 2016-3-13 22:49:01

回复 14# lanfengc
目前也就这个方法最可靠了!十分感谢!
页: [1]
查看完整版本: [已解决]如何检测窗口在闪烁?(指WinFlash那种效果)