找回密码
 加入
搜索
查看: 9602|回复: 24

[AU3基础] [已解决]QQ批量登录无法实现【附上代码,恳请指出错误】

 火.. [复制链接]
发表于 2012-1-8 13:09:09 | 显示全部楼层 |阅读模式
本帖最后由 qq271859852 于 2012-1-16 20:21 编辑
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <ProgressConstants.au3>
#include <SliderConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <Array.au3>
#region ### START Koda GUI section ### Form=
;~ 创建主界面
$Form1 = GUICreate("QQ批量登录工具", 473, 355, 192, 124)
$ListView1 = GUICtrlCreateListView("", 8, 8, 449, 305, _
                BitOR($GUI_SS_DEFAULT_LISTVIEW, _
                $WS_HSCROLL, $WS_VSCROLL), _
                BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, _
                $LVS_EX_CHECKBOXES))
$Button1 = GUICtrlCreateButton("登   录", 96, 320, 81, 25)
$Button2 = GUICtrlCreateButton("使用说明", 257, 320, 81, 25)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
Local $j
;~ For $j = 0 To 9
;~         IniWrite(@ScriptDir & "\自动登陆配置信息.ini", $j, "QQ号", "")
IniWrite(@ScriptDir & "\自动登陆配置信息.ini", $j, "密码", "")
;~ Next
;~ 书写配置文件,填写入QQ号码与密码


_Main()

Func _Main();~ 主函数
        _GUICtrlListView_AddColumn($ListView1, "QQ号码", 140)
        _GUICtrlListView_AddColumn($ListView1, "密码", 140)
        Local $i
        Local $QQDate[10][3];定义二维数组$QQDate储存QQ帐和密码等信息
        For $i = 0 To 9
                $QQDate[$i][1] = IniRead(@ScriptDir & "\自动登陆配置信息.ini", $i, "QQ号", "")
                $QQDate[$i][2] = IniRead(@ScriptDir & "\自动登陆配置信息.ini", $i, "密码", "")
        Next;读取配置信息
        If IsArray($QQDate) Then
                _GUICtrlListView_BeginUpdate($ListView1)
                _GUICtrlListView_DeleteAllItems($ListView1)
                For $i = 0 To 9
                        GUICtrlCreateListViewItem($QQDate[$i][1] & "|" & $QQDate[$i][2], $ListView1)
                Next
                _GUICtrlListView_EndUpdate($ListView1)
        EndIf;根据配置文件信息创建ListView列表
        For $i = 0 To 9
                If Not $QQDate[$i][1] = "" Or Not $QQDate[$i][2] = "" Then
                        _GUICtrlListView_SetItemChecked($ListView1, $i)
                EndIf
        Next;设置QQ号和密码都不为空的项为“选中“状态
        
        While 1;开启循环模式
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                                Exit
                        Case $Button1;单击登录
                                For $i = 0 To 9
                                        If _GUICtrlListView_GetItemChecked($ListView1, $i) Then;如果选中,则运行QQ,并填入相应的QQ号码与密码
                                                Run("D:\Program Files\Tencent\QQ\Bin\QQ.exe")
                                                WinWait("QQ2011")
                                                WinActivate("QQ2011")
                                                Sleep(250)
                                                ControlSend("QQ2011", "", "TXEdit1", $QQDate[$i][1])
                                                Sleep(250)
                                                ControlClick("QQ2011", "N", "[CLASS:Edit; INSTANCE:1]", "left")
                                                Sleep(250)
                                                Send($QQDate[$i][2])
                                                Sleep(250)
                                                Send("{enter}")
                                                Sleep(3000)
                                        EndIf;登录
                                Next
                                
                                
                        
                EndSwitch
        WEnd
EndFunc   ;==>_Main
问题:登录的时候,无法全都登录,至多只能登录一个,其它会错乱。
我想应该是winwait("QQ2011"),因为登录了一个QQ后,QQ窗口跟QQ的登录窗口标题都是"QQ2011”,产生了干扰,请问如何能解决这干扰?
还有一个问题:这是在无弹窗干扰的情况下登录QQ,如果有弹窗干扰(如QQ新闻)肯定无法曳继续填写QQ号和密码了,我想开启一个循环让它不断地激活QQ登录窗口,不知可否实现?代码又应怎样书写?
(注:QQ是最新的官方QQ2011正式版)

本帖子中包含更多资源

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

×
发表于 2012-1-8 13:22:07 | 显示全部楼层
QQ不是有自带的多账号登录吗?
 楼主| 发表于 2012-1-8 13:24:21 | 显示全部楼层
回复 2# auto


    是带有,写这个东东只为了练习AU3,没有什么实用价值。想知道怎么实现。,请问你有什么好主意吗?
发表于 2012-1-8 13:34:14 | 显示全部楼层
不是有这个吗SendKeepActive
 楼主| 发表于 2012-1-8 13:39:14 | 显示全部楼层
回复 4# zldfsz


    如果用SendKeepActive,连密码都不能输入
发表于 2012-1-8 15:19:58 | 显示全部楼层
登录后设置QQ隐藏窗口吧
 楼主| 发表于 2012-1-8 15:43:15 | 显示全部楼层
回复 6# user3000


    问题:如何隐藏?如果使用WinSetState("QQ2011", "", @SW_HIDE),将会把QQ登录窗口隐藏掉。
发表于 2012-1-8 16:28:37 | 显示全部楼层
                                                Run("D:\Program Files\Tencent\QQ\Bin\QQ.exe")

                                                WinWait("QQ2011")

                                                WinActivate("QQ2011")

                                                Sleep(250)

                                                ControlSend("QQ2011", "", "TXEdit1", $QQDate[$i][1])

                                                Sleep(250)

                                                ControlClick("QQ2011", "N", "[CLASS:Edit; INSTANCE:1]", "left")

                                                Sleep(250)

                                                Send($QQDate[$i][2])

                                                Sleep(250)

                                                Send("{enter}")

                                                Sleep(3000)

这一段在多窗口中全是会产生错乱的~~用窗口句柄来代替
 楼主| 发表于 2012-1-8 16:50:30 | 显示全部楼层
回复 8# wua0550


    可是即使得到了句柄也没有用啊?send和controlsend等函数都不支持句柄,
发表于 2012-1-8 16:59:03 | 显示全部楼层
无语~~~~~你用WinActivate 把要输帐号密码的窗口激口后send自然只对这个窗口有作用了.....

再说了 谁告诉用 ControlSend 不支持窗口句柄的?
发表于 2012-1-8 17:04:51 | 显示全部楼层
回复 5# qq271859852


怎么会呢,你加在哪儿啊;如下,在循环里加上SendKeepActive("QQ2011"),其他未动你的,你再试试
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <ProgressConstants.au3>
#include <SliderConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <Array.au3>
#region ### START Koda GUI section ### Form=
;~ 创建主界面
$Form1 = GUICreate("QQ批量登录工具", 473, 355, 192, 124)
$ListView1 = GUICtrlCreateListView("", 8, 8, 449, 305, _
                BitOR($GUI_SS_DEFAULT_LISTVIEW, _
                $WS_HSCROLL, $WS_VSCROLL), _
                BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, _
                $LVS_EX_CHECKBOXES))
$Button1 = GUICtrlCreateButton("登   录", 96, 320, 81, 25)
$Button2 = GUICtrlCreateButton("使用说明", 257, 320, 81, 25)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
Local $j
;~ For $j = 0 To 9
;~         IniWrite(@ScriptDir & "\自动登陆配置信息.ini", $j, "QQ号", "")
IniWrite(@ScriptDir & "\自动登陆配置信息.ini", $j, "密码", "")
;~ Next
;~ 书写配置文件,填写入QQ号码与密码


_Main()

Func _Main();~ 主函数
        _GUICtrlListView_AddColumn($ListView1, "QQ号码", 140)
        _GUICtrlListView_AddColumn($ListView1, "密码", 140)
        Local $i
        Local $QQDate[10][3];定义二维数组$QQDate储存QQ帐和密码等信息
        For $i = 0 To 9
                $QQDate[$i][1] = IniRead(@ScriptDir & "\自动登陆配置信息.ini", $i, "QQ号", "")
                $QQDate[$i][2] = IniRead(@ScriptDir & "\自动登陆配置信息.ini", $i, "密码", "")
        Next;读取配置信息
        If IsArray($QQDate) Then
                _GUICtrlListView_BeginUpdate($ListView1)
                _GUICtrlListView_DeleteAllItems($ListView1)
                For $i = 0 To 9
                        GUICtrlCreateListViewItem($QQDate[$i][1] & "|" & $QQDate[$i][2], $ListView1)
                Next
                _GUICtrlListView_EndUpdate($ListView1)
        EndIf;根据配置文件信息创建ListView列表
        For $i = 0 To 9
                If Not $QQDate[$i][1] = "" Or Not $QQDate[$i][2] = "" Then
                        _GUICtrlListView_SetItemChecked($ListView1, $i)
                EndIf
        Next;设置QQ号和密码都不为空的项为“选中“状态
        
        While 1;开启循环模式
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                                Exit
                        Case $Button1;单击登录
                                For $i = 0 To 9
                                        If _GUICtrlListView_GetItemChecked($ListView1, $i) Then;如果选中,则运行QQ,并填入相应的QQ号码与密码
                                                Run("D:\Program Files\Tencent\QQ\Bin\QQ.exe")
                                                WinWait("QQ2011")
                                                WinActivate("QQ2011")
                                                                                                SendKeepActive("QQ2011");我就加了这句                                                
                                                Sleep(250)
                                                ControlSend("QQ2011", "", "TXEdit1", $QQDate[$i][1])
                                                Sleep(250)
                                                ControlClick("QQ2011", "N", "[CLASS:Edit; INSTANCE:1]", "left")
                                                Sleep(250)
                                                Send($QQDate[$i][2])
                                                Sleep(250)
                                                Send("{enter}")
                                                Sleep(3000)
                                        EndIf;登录
                                Next
                                
                                
                        
                EndSwitch
        WEnd
EndFunc   ;==>_Main
发表于 2012-1-8 17:07:51 | 显示全部楼层
回复  user3000


    问题:如何隐藏?如果使用WinSetState("QQ2011", "", @SW_HIDE),将会把QQ登录窗 ...
qq271859852 发表于 2012-1-8 15:43


有没认真看字啊, 是登录后再隐藏....
 楼主| 发表于 2012-1-8 17:08:25 | 显示全部楼层
回复 11# zldfsz


    果然可以了,谢谢朋友了。
我把send全都换成了sendkeepactive。。。。。难怪不行
现在有急事先走了,下次回来再测试其它问题。如有难处,再向你请教。
再次谢谢!
 楼主| 发表于 2012-1-8 17:16:36 | 显示全部楼层
回复 12# user3000


    是了,这样的效果更好,谢谢!
发表于 2012-1-8 17:24:35 | 显示全部楼层
登陆之后修改窗口标题..
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-1 06:56 , Processed in 0.080909 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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