找回密码
 加入
搜索
查看: 8456|回复: 19

[AU3基础] 【已解决】如何检测大小写是否锁定?

  [复制链接]
发表于 2015-9-5 11:17:36 | 显示全部楼层 |阅读模式
本帖最后由 gyhhi 于 2015-10-19 18:42 编辑

下面是从论坛搜到的,经测试不能用,_GetCapsLock返回的是乱码,而不是0或1,求助AU3大神

检测大小写键:
If _GetCapsLock() Then
        ConsoleWrite("Caps On" & @CRLF)     
Else
        ConsoleWrite("Caps Off" & @CRLF)
EndIf
   

Func _GetCapsLock($VK_CAPS = 0x14)
    Local $ret
    $ret = DllCall("user32.dll","long","GetKeyState","long",$VK_CAPS)
    Return $ret[0]
EndFunc
发表于 2015-9-5 14:51:11 | 显示全部楼层
表示该 脚本正常  能返回大小写锁定的正确结果

本帖子中包含更多资源

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

×
发表于 2015-9-5 15:53:29 | 显示全部楼层
3.3.14.1下测试正常
发表于 2015-9-5 22:44:25 | 显示全部楼层
回复 1# gyhhi
这句改一下:
$ret = DllCall("user32.dll","long","GetKeyState","long",$VK_CAPS)
应改为:
$ret = DllCall("user32.dll", "Int", "GetKeyState", "int", $VK_CAPS)
你试试
 楼主| 发表于 2015-9-6 11:23:37 | 显示全部楼层
回复 4# chzj589


    不行,电脑是64位win7。
发表于 2015-9-6 11:43:14 | 显示全部楼层
回复 5# gyhhi
这样再试试:
        Local $ret
        If _GetCapsLock() Then
        ConsoleWrite("Caps On" & @CRLF)
        MsgBox(0, "大写键盘灯", "大写键盘灯状态:  亮", 10)
        Else
        MsgBox(0, "大写键盘灯", "大写键盘灯状态:  灭", 10)
        ConsoleWrite("Caps Off" & @CRLF)
        EndIf
       
       
        Func _GetCapsLock($VK_CAPS = 0x14)
        Local $ret
        $ret = DllCall("user32.dll", "Int", "GetKeyState", "int", $VK_CAPS);20)
        Return $ret[0]
        EndFunc   ;==>_GetCapsLock
发表于 2015-9-6 12:13:37 | 显示全部楼层
回复 5# gyhhi
我电脑是32位win7与XP,没有电脑是64位的测试。
下面是形成的程序,你试试是否可运行?

本帖子中包含更多资源

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

×
 楼主| 发表于 2015-9-9 10:38:33 | 显示全部楼层
回复 7# chzj589


    真是奇怪了,你下面这个exe能用,大小写能区分。但是你上面给的程序却不行,始终显示“亮”
 楼主| 发表于 2015-9-9 10:41:10 | 显示全部楼层
回复 7# chzj589


    要不你把这个exe的AU3源码发上来我再看看,谢谢
发表于 2015-9-9 16:37:30 | 显示全部楼层
回复 8# gyhhi
你有按一次键盘大小写按键吗?
操作:
按一次大小写按键,再运行一次程序。
可能你键盘大小写按键没变换,
发表于 2015-9-11 10:04:45 | 显示全部楼层
回复 9# gyhhi
While 1
        Sleep(100)
WEnd

Func gui()
        $gform1 = GUICreate("大写键盘灯:", @DesktopWidth - 804, @DesktopHeight - 694, -1, -1)
        GUISetOnEvent($gui_event_close, "GForm1Close")
        $label1 = GUICtrlCreateLabel("键盘大小写状态:", 20, 20, 130, 17)
        GUICtrlSetFont(-1, 12, 400, 0, "微软雅黑")
        $labela = GUICtrlCreateLabel("", 150, 20, 70, 21)
        GUICtrlSetFont(-1, 12, 600, 0, "微软雅黑")
        $button1 = GUICtrlCreateButton("", 100, 45, 100, 22)
        GUICtrlSetOnEvent($button1, "g_Button1")
        $button2 = GUICtrlCreateButton("", 100, 45, 100, 22)
        GUICtrlSetOnEvent($button2, "g_Button2")
        _result()
        GUISetState(@SW_SHOW)
EndFunc   ;==>gui

Func _result()
        $result = DllCall("user32.dll", "Int", "GetKeyState", "int", 20)
        If @error = 1 Then
                MsgBox(0, "错误", "函数调用失败")
                Exit
        Else
                If $result[0] = 1 Then
                        GUICtrlSetState($button1, $gui_hide)
                        GUICtrlSetState($button2, $gui_show)
                        GUICtrlSetData($labela, "大写")
                        GUICtrlSetData($button2, "键盘状态:大写")
                        GUICtrlSetColor($labela, 39168)
                        GUICtrlSetColor($label1, 39168)
                Else
                        GUICtrlSetState($button2, $gui_hide)
                        GUICtrlSetState($button1, $gui_show)
                        GUICtrlSetData($labela, "小写")
                        GUICtrlSetData($button1, "键盘状态:小写")
                        GUICtrlSetColor($labela, 16711680)
                        GUICtrlSetColor($label1, 16711680)
                EndIf
        EndIf
EndFunc   ;==>_result
发表于 2015-9-12 19:44:15 | 显示全部楼层
回复 11# ddrs
请问上面的代码字体颜色为何是这种方式?

GUICtrlSetColor($labela, 39168)
GUICtrlSetColor($label1, 39168)
   
GUICtrlSetColor($labela, 16711680)
GUICtrlSetColor($label1, 16711680)
发表于 2015-9-14 06:49:21 | 显示全部楼层
回复 11# ddrs

看你这么热心帮助人,还是教一下:
字体颜色为何是这种方式?
GUICtrlSetColor($labela, 39168)
GUICtrlSetColor($labela, 16711680)
这种 颜色如何查询代码?
我用的是:
0xFF0000

0xFFFF0000
 楼主| 发表于 2015-9-14 10:19:26 | 显示全部楼层
回复 10# chzj589


    我晕,这种事情当然不会忘记。按一下,caps亮了,你6楼的程序显示“亮”,我再按一下caps,灯灭了,6楼程序显示“亮”!!!!同样的操作,你那个exe文件却没问题,亮灭显示都是对的。所以才想请你把exe的au3源代码发上来我想看看是咋回事,这种情况简直让人无法理解
 楼主| 发表于 2015-9-14 10:28:33 | 显示全部楼层
回复 13# chzj589


    颜色值这个我明白,颜色数值实质上是RGB(RED红、GREEN绿、BLUE蓝)颜色的加权叠加,三个颜色各自最大值都是255,也即十六进制的FF。
三原色权重分别为:255^2、255^1、255^0,也即。比如按照配色原理,纯红绿蓝三者的叠加色=白色,那么白色的代码就是0xff*(255^2)+0xff*(255^1)+0xff*(255^0)=0xffffff=16777215.
再比如,红绿叠加=黄,那就是0xff*(255^2)+0xff*(255^1)+0x00*(255^0)=0xffff00=16776960.
扯了半天,就是16进制和10进制的转换的问题,程序员肯定懂得。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-27 01:03 , Processed in 0.084939 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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