找回密码
 加入
搜索
查看: 1311|回复: 1

如何精确的截获每次键盘按键?

[复制链接]
发表于 2009-9-13 20:56:28 | 显示全部楼层 |阅读模式
本帖最后由 omegabomb 于 2009-9-14 10:08 编辑

我想实现魔兽的物品栏改键功能。现在的问题是,按下一个键之后,连续发送了好几个键。
比如我设置为按A发送7,按B发送8。
运行之后,按A就发送a77777,若干个7,前面还有一个a,感觉一次按键的时间和while循环的时间不匹配。按键一下下去已经循环了好几次。该如何解决?
#include <GUIConstants.au3>
#Include <Misc.au3>
Global $CodeGUI,$dll
$GUI=GUICreate("魔兽改键",250,130)
GUICtrlCreateLabel("小键盘7:",10,13,50,20)
GUICtrlCreateLabel("小键盘8:",125,13,50,20)
GUICtrlCreateLabel("小键盘4:",10,43,50,20)
GUICtrlCreateLabel("小键盘5:",125,43,50,20)
GUICtrlCreateLabel("小键盘1:",10,73,50,20)
GUICtrlCreateLabel("小键盘2:",125,73,50,20)
$Input7=GUICtrlCreateInput("",60,10,60,20)
$Input8=GUICtrlCreateInput("",175,10,60,20)
$Input4=GUICtrlCreateInput("",60,40,60,20)
$Input5=GUICtrlCreateInput("",175,40,60,20)
$Input1=GUICtrlCreateInput("",60,70,60,20)
$Input2=GUICtrlCreateInput("",175,70,60,20)
$Confirm=GUICtrlCreateButton("确定设置",30,100,80,20)
$Code=GUICtrlCreateButton("按键代码",140,100,80,20)
GUISwitch($GUI)
GUISetState(@SW_SHOW)

While 1
        If GUICtrlRead($Input7)<>"" And _IsPressed(GUICtrlRead($Input7),$dll) Then Send("{NUMPAD7}")
        If GUICtrlRead($Input8)<>"" And _IsPressed(GUICtrlRead($Input8),$dll) Then Send("{NUMPAD8}")
        If GUICtrlRead($Input4)<>"" And _IsPressed(GUICtrlRead($Input4),$dll) Then Send("{NUMPAD4}")
        If GUICtrlRead($Input5)<>"" And _IsPressed(GUICtrlRead($Input5),$dll) Then Send("{NUMPAD5}")
        If GUICtrlRead($Input1)<>"" And _IsPressed(GUICtrlRead($Input1),$dll) Then Send("{NUMPAD1}")
        If GUICtrlRead($Input2)<>"" And _IsPressed(GUICtrlRead($Input2),$dll) Then Send("{NUMPAD2}")
        $nMsg=GUIGetMsg(1)
        Switch $nMsg[0]
                Case $GUI_EVENT_CLOSE
                        Switch $nMsg[1]
                                Case $GUI
                                        DllClose($dll)
                                        Exit
                                Case $CodeGUI
                                        GUIDelete($CodeGUI)
                        EndSwitch
                Case $Code
                        CreateCodeGUI()
                Case $Confirm
                        $dll = DllOpen("user32.dll")
                        GUISwitch($GUI)
                        GUISetState(@SW_MINIMIZE)
        EndSwitch
WEnd

Func CreateCodeGUI()
        $CodeGUI=GUICreate("键盘代码",200,400)
        GUISetState(@SW_SHOW)
EndFunc
 楼主| 发表于 2009-9-14 10:08:19 | 显示全部楼层
自己解决了,还是用会原来的HotSetKey吧
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2025-1-12 13:14 , Processed in 0.071762 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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