找回密码
 加入
搜索
查看: 7490|回复: 20

[AU3基础] QQ自动登入,但是有时候电脑键盘已大写锁定吗,请问大神们这个怎么解决[已解决]

 火.. [复制链接]
发表于 2017-6-9 20:35:10 | 显示全部楼层 |阅读模式
本帖最后由 addfree 于 2017-6-10 21:36 编辑

盆友们,最近刚学AU3,主要是为了满足一些自动化操作的需求,试了试自动登入QQ,但是有一个问题,就是有时候电脑键盘会被大写锁定,这个时候自动登入就肯定不行了,有没有什么办法在大写锁定时候写一个语句,自动按下caps lock键?

本帖子中包含更多资源

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

×
发表于 2017-6-9 20:47:26 | 显示全部楼层
勾选保存密码和自动登录,登录一次就OK了啊。。
发表于 2017-6-9 20:52:30 | 显示全部楼层
_WinAPI_GetKeyState
检索指定虚拟键的状态 


#include <WinAPISys.au3>
_WinAPI_GetKeyState ( $vKey )


参数
$vKey 指定虚拟键 ($VK_*).
虚拟键为字母或数字(A 到 Z, a 到 z 或 0 到 9) 

返回值
返回指定虚拟键的状态值.
        如果高序位为 1, 键被按下, 反之为松开.
        对于切换键, 比如 CAPS LOCK 键, 则打开时低序数位为 1, 关闭时为 0.
        切换键打开时键盘上的切换键指示灯(如果有)将点亮, 反之则关闭. 
 楼主| 发表于 2017-6-9 20:53:14 | 显示全部楼层
回复 2# fybhwsx 时间自动登入不是重点,只是借QQ自动登入这个例子来学习一些简单的自动操作,
 楼主| 发表于 2017-6-9 22:19:28 | 显示全部楼层
回复 3# yamakawa
不好意思,在请教一下,这个函数是直接调用吗?
If _WinAPI_GetKeyState ( $VK_CAPSLOCK )=1 Then Send({CAPSLOCK})
Else
EndIf
我这样用是不是存在语法错误还是逻辑错误?
发表于 2017-6-10 06:12:21 | 显示全部楼层
本帖最后由 fybhwsx 于 2017-6-10 06:30 编辑

没用过这个函数,但看介绍只是字母和数字,对这个大写键不管用吧?
#include <WinAPISys.au3>
If _WinAPI_GetKeyState ( $VK_CAPSLOCK )=1 Then Send({CAPSLOCK})

If _WinAPI_GetKeyState ( $VK_CAPSLOCK )=1 Then
    Send({CAPSLOCK})
Else
EndIf
还是善用搜索吧,搜索“大写”,有解决方法。
发表于 2017-6-10 12:31:34 | 显示全部楼层
= =#楼主确认AU3可以输入QQ密码?
我试过不行,我是用大漠实现的
发表于 2017-6-10 16:46:35 | 显示全部楼层
有空尝试了一下,我用的腾讯TIM,QQ应该也可以用。
Opt("MouseCoordMode", 2) ;使用客户区的相对坐标(注意修改窗口探测工具的坐标模式)

AutoItSetOption("SendCapslockMode", 0)
Send("{CAPSLOCK OFF}") ;关闭大写

;修改win10输入法默认为英文输入(需要注销或重启计算机一次)
Local $Win10CH_EN = RegRead("HKEY_CURRENT_USER64\SOFTWARE\Microsoft\InputMethod\Settings\CHS", "Default Mode") ;Win10中英文输入默认键值
If $Win10CH_EN <> 1 Then
        RegWrite("HKEY_CURRENT_USER64\SOFTWARE\Microsoft\InputMethod\Settings\CHS", "Default Mode", "REG_DWORD", "1")
        ;RegWrite("HKEY_CURRENT_USER64\SOFTWARE\Microsoft\InputMethod\Settings\CHS", "Enable Cloud Candidate", "REG_DWORD", "0") ;关闭输入云计算
EndIf


WinActivate("TIM") ;激活登录窗口

ControlClick("TIM", "", "", "left", 3, 262, 280) ;3击账号框修改账号
Sleep(500)
ControlSend("TIM", "", "", "1234567") ;ControlSend函数输入QQ号正常
;Send("1234567",1)

ControlClick("TIM", "", "", "left", 3, 263, 305) ;3击密码框
Sleep(500)
;ControlSend("TIM", "", "Edit1", "1234567",1);ControlSend函数这样可以输入,但登录提示密码错误?
Send("1234567", 1) ;这样输入就能登录,问题在哪儿?高手有空试试。。。

;ControlClick("TIM", "", "", "left", 1, 263, 372);点击登陆

;Exit
 楼主| 发表于 2017-6-10 20:27:59 | 显示全部楼层
回复 8# fybhwsx
谢谢f大,今天下午刚看到这个设置选项,没想到现在看到你的提示了,谢谢啊,太谢谢了~
发表于 2017-6-10 22:48:51 | 显示全部楼层
很高兴能帮到你,一起学习哈。
发表于 2017-6-10 23:21:39 | 显示全部楼层
fybhwsx说只能检查数字或者字母,所以你肯定没试过。。

我是自己写了个小脚本,可以检测到大小写状态才发来的。。。而不是随意猜测

这个是来自帮助文件的
_WinAPI_GetKeyState
检索指定虚拟键的状态 


#include <WinAPISys.au3>
_WinAPI_GetKeyState ( $vKey )


参数
$vKey 指定虚拟键 ($VK_*).
虚拟键为字母或数字(A 到 Z, a 到 z 或 0 到 9) 

返回值
返回指定虚拟键的状态值.
        如果高序位为 1, 键被按下, 反之为松开.
        对于切换键, 比如 CAPS LOCK 键, 则打开时低序数位为 1, 关闭时为 0.
        切换键打开时键盘上的切换键指示灯(如果有)将点亮, 反之则关闭. 

相关
_WinAPI_GetAsyncKeyState

参考资料
点击 GetKeyState 搜索 MSDN 文档库 

函数示例

复制到剪切板 #include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>

Local $aOnOff[2] = ['OFF', 'ON']

ConsoleWrite('NumLock: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_NUMLOCK), 1)] & @CRLF)
Sleep(1500)
Send('{NUMLOCK toggle}')
ConsoleWrite('NumLock: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_NUMLOCK), 1)] & @CRLF)
Sleep(1500)
Send('{NUMLOCK toggle}')
ConsoleWrite('NumLock: ' & $aOnOff[BitAND(_WinAPI_GetKeyState($VK_NUMLOCK), 1)] & @CRLF)
发表于 2017-6-10 23:29:23 | 显示全部楼层
#include <WinAPISys.au3>

Local $aOnOff[2] = ['OFF', 'ON']

MsgBox(0,'CapsLock: ',$aOnOff[BitAND(_WinAPI_GetKeyState(0X14), 1)]);0x14是CapsLock
这个是我自己写的测试代码
发表于 2017-6-11 06:26:02 | 显示全部楼层
这个是我自己写的测试代码
yamakawa 发表于 2017-6-10 23:29



    抱歉哈,确实不知道这么用,测试有效,学习了!
 楼主| 发表于 2017-6-11 20:21:33 | 显示全部楼层
回复 8# fybhwsx
#include <AutoItConstants.au3>;头文件名
Opt("MouseCoordMode",1);OPT为AutoItSetOption调整函数或参数操作方式的缩写.
                                    ;1=默认值
Opt("SendCapslockMode", 0);SendCapslockMode确定 AutoIt 执行 Send() 函数之前,是否保存大小写切换键(CapsLock)的状态,
                              ;并在完成操作后恢复原来的状态.0,不保存,1,保存并恢复。                                                                       
Send("{CAPSLOCK OFF}");关闭大小写锁定,on,打开。
Run("C:\Program Files (x86)\Tencent\QQIntl\Bin\QQ.exe");按路径打开QQ国际版
WinWait("TXGuiFoundation","密碼",2);等待窗口激活
MouseClick ("left",606,417,1,1);点击密码框,主要是为找到光标以继续下面的指令。                                                          
Send("{TAB 12}");按12下tab键让光标运行到账号输入框。
Sleep(1000);亲测可以不延时,这里只做测试用。但是包括以下句子不延时好像容易卡死,不明原因。
Send("账号");输入密码。
;Sleep(1000)
Send("{TAB 1}");将光标移动到密码框。
;Sleep(1000)
Send("密码");输入密码密码
Send("{ENTER}");按下确定键登入
#cs以上是根据论坛朋友提供的思路一个简单的QQ自动登入程序,测几遍,有些BUG,不知道大家还有没有更简单的方法,

@@@@@@@@@@碰到的一些问题@@@@@@@@@@
我为什么会先定位密码框,是因为AU3窗口信息工具无法捕获账号输入框的信息,加上我还不怎么会用这个语言,

所以只能按移动光标的思路来解决问题,但是我还是有些疑问,希望论坛有高手可以给一些提示。
第一个问题,能不能弹出窗口,直接模拟鼠标直接点击账号框,然后点击密码框。注意的是:账号框不能捕获

第二个问题,能不能弹出窗口,先判断一下光标在哪里,1:如果在密码框,就先输入密码,然后将光标移到账号框输入账号
                                                                                                  2:如果在账号框,就直接输入账号,然后将光标移动到密码框输入密码
希望大神高手们指点迷津,刚学不久还有点稀里糊涂,多多指教,谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!
#ce
跟着你的思路做的,但是有发现了新问题
发表于 2017-6-11 21:00:05 | 显示全部楼层
= =#你先确认一个最基本的问题先,不管大小写,
输入密码是无法登录QQ的
QQ密码控件加密了!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-20 12:21 , Processed in 0.084932 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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