66343022 发表于 2013-3-14 23:17:53

求大神给个思路,更好的判断QQ登陆验证码的出现.

66343022 发表于 2013-3-14 23:22:39

自己先顶顶···本人笨拙,以下是判断的源码,但并没有实际判断成功.

        While 1
                Sleep(200)

                Local $a_Pot1 = PixelSearch(40, 50, 80, 90, 0xED7210, 0, 1, $h_Wnd);黄色警告
                If IsArray($a_Pot1) Then
                        Local $a_Pot2 = PixelSearch(280, 240, 360, 250, 0x2685E3, 0, 1, $h_Wnd);蓝色提示“设置登录保护”
                        If IsArray($a_Pot2) Then;验证码出现?
                                ToolTip("拉取验证码...", 0,0)
                        Else                               
                                          ToolTip("密码错误或其他情况...", 0,0)
                        EndIf
                EndIf
            WEnd

fy1126 发表于 2013-3-16 15:39:05

回复 1# 66343022


    用读取控件上的文本这种方法来判断行不?我没试过你可以试下。

mbdnmt 发表于 2013-3-17 00:50:54

检测这个框干啥? 不至于想要暴力破解吧?

mbdnmt 发表于 2013-3-17 01:38:41

回复 2# 66343022

用这个试试,用它拿去修改吧,这里有一个缺点就是会移动几下鼠标Global $h_QQ
Local $var = WinList()
For $i = 1 To $var
    ; 只显示有标题的可见窗口
    If $var[$i] <> "" And IsVisible($var[$i]) Then
      ;MsgBox(0, "详细信息", "标题 = '" & $var[$i] & "'" & @LF & "句柄 ='" & $var[$i] & "'")
                If StringRegExp($var[$i], "QQ201") Then
                        ;搜寻QQ窗体,并找到句柄
                        $h_QQ = $var[$i]
                EndIf
    EndIf
Next
Func IsVisible($handle)
    If BitAND(WinGetState($handle), 2) Then
      Return 1
    Else
      Return 0
    EndIf

EndFunc   ;==>IsVisible

Sleep(2000)
; 激活QQ窗体
$sRtn = WinActivate($h_QQ, "")
If $sRtn = 0 Then
        MsgBox(0, "Error!", "激活QQ窗体失败!")
        Exit
EndIf       

; 获得QQ登录窗体的位置
$aTemp = WinGetPos($h_QQ)
$iQQx = $aTemp
$iQQy = $aTemp

; 保存当前鼠标位置
$aTemp = MouseGetPos()
$ix = $aTemp
$iy = $aTemp

;=== 移动鼠标,根据对目标窗体的特征点的鼠标光标来判断是否检测到目标窗体
$str = ""
MouseMove(280 + $iQQx, 96 + $iQQy)
$iRtn = MouseGetCursor()
$str = $str & $iRtn
;ConsoleWrite("$iRtn is " & $iRtn & @CRLF)

MouseMove(280 + $iQQx, 200 + $iQQy)
$iRtn = MouseGetCursor()
$str = $str & $iRtn
;ConsoleWrite("$iRtn is " & $iRtn & @CRLF)

MouseMove(280 + $iQQx, 230 + $iQQy)
$iRtn = MouseGetCursor()
$str = $str & $iRtn
;ConsoleWrite("$iRtn is " & $iRtn & @CRLF)
If $str = "5216" Then
        MsgBox(0, "Note", "验证码出现!")
EndIf

baijiri 发表于 2013-3-18 18:38:21

好人啊源代码都放出来了非常感谢

sniperone 发表于 2013-3-19 08:36:23

新手报到,收下学习学习~

66343022 发表于 2013-3-22 08:04:07

不胜感激``` 有源码学习学习了。

66343022 发表于 2013-3-22 08:07:40

测试了,可行!很准确的说
页: [1]
查看完整版本: 求大神给个思路,更好的判断QQ登陆验证码的出现.