- 版本 v1.1.15.01
- 指南和概述
- 常见问题(FAQ)
- 按字母排序的命令和函数索引
- AutoHotkey 脚本展示
- 变更和新功能
- 基本用法和语法
- 迁移到 AutoHotkey 1.1(AutoHotkey_L)
- 环境管理
- 本机代码互操作
- 文件、目录和磁盘管理
- Drive
- DriveGet
- DriveSpaceFree
- FileAppend
- FileCopy
- FileCopyDir
- FileCreateDir
- FileCreateShortcut
- FileDelete
- FileEncoding [AHK_L 42+]
- FileGetAttrib
- FileGetShortcut
- FileGetSize
- FileGetTime
- FileGetVersion
- FileInstall
- FileMove
- FileMoveDir
- FileOpen [AHK_L 42+]
- FileReadLine
- FileRead
- FileRecycle
- FileRecycleEmpty
- FileRemoveDir
- FileSelectFile
- FileSelectFolder
- FileSetAttrib
- FileSetTime
- IfExist / IfNotExist
- IniDelete
- IniRead
- IniWrite
- Loop(文件和文件夹)
- Loop(读取文件内容)
- SetWorkingDir
- SplitPath
- 流程控制
- 内置函数
- GUI、MsgBox、InputBox 及其他对话框
- 鼠标和键盘
- 鼠标和键盘
- #InstallKeybdHook
- #InstallMouseHook
- #KeyHistory
- BlockInput
- Click [v1.0.43+]
- ControlClick
- ControlSend / ControlSendRaw
- CoordMode
- GetKeyState
- KeyHistory
- KeyWait
- Input
- MouseClick
- MouseClickDrag
- MouseGetPos
- MouseMove
- Send / SendRaw / SendInput / SendPlay / SendEvent: 发送按键和点击
- SendLevel [v1.1.06+]
- SendMode [v1.0.43+]
- SetDefaultMouseSpeed
- SetKeyDelay
- SetMouseDelay
- SetCapsLockState/SetNumLockState/SetScrollLockState
- SetStoreCapslockMode
- 数学相关
- 屏幕管理
- 杂项命令
- 进程管理
- 注册表管理
- 声音命令
- 字符串管理
- 窗口管理
- 控件
- 窗口组
- #WinActivateForce
- DetectHiddenText
- DetectHiddenWindows
- SetTitleMatchMode
- SetWinDelay
- StatusBarGetText
- StatusBarWait
- WinActivate
- WinActivateBottom
- WinClose
- WinGet
- WinGetActiveStats
- WinGetActiveTitle
- WinGetClass
- WinGetPos
- WinGetText
- WinGetTitle
- WinHide
- WinKill
- WinMaximize
- WinMinimize
- WinMinimizeAll / WinMinimizeAllUndo
- WinMove
- WinRestore
- WinSet
- WinSetTitle
- WinShow
- WinWait
- WinWaitActive / WinWaitNotActive
- WinWaitClose
- #指令
GetKeyState
检查键盘按键或鼠标/操纵杆按钮是否按下或放开。也可以获取操纵杆的状态。
GetKeyState, OutputVar, KeyName [, Mode] KeyIsDown := GetKeyState("KeyName" [, "Mode"])
参数
- OutputVar
用来保存获取的按键状态的变量名, 它的值在按下时是 D 而弹起时是 U (不过 GetKeyState() 函数在按下时返回 true (1) 而弹起时返回 false (0)). 如果按键的状态无法识别, 则此变量为空.
下面是关于操纵杆的几点说明:
1) 对于像 JoyX 这样的操纵杆轴, OutputVar 将被设置为介于 0 和 100 之间的浮点数, 作为该轴活动范围的百分率, 表示操纵杆的位置. 可以使用 SetFormat 改变此数字的格式. 此 测试脚本 可以用来分析您的操纵杆.
2) 当 KeyName 为 JoyPOV 时, 获取的值将介于 0 和 35900 之间. 许多操纵杆使用与下列近似的 POV 值:
-1: 没有角度
0: 向前 POV
9000 (即 90 度): 向右 POV
27000 (即 270 度): 向左 POV
18000 (即 180 度): 向后 POV- KeyName
此参数可以是键盘中任何的单个字符或 按键列表 中的其中一个键名, 例如鼠标/操纵杆按钮. 例如: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.
或者, 可以指定明确的虚拟按键代码, 例如 vkFF. 只有在一个按键没有指定名称这样少见的情况下, 这种方法才有用. 这种按键的虚拟按键代码可以通过按键列表页面底部的步骤来确定。
已知限制: 此函数无法区别共享相同虚拟按键代码的两个按键, 例如 Left 和 NumpadLeft.
- Mode
获取操纵杆状态时, 此参数被忽略.
如果省略, 则默认的模式是获取按键的逻辑状态. 这是操作系统和活动窗口所认为的按键所处的状态, 但可能和它的物理状态不一致.
或者, 可以指定这些字母的其中一个:
P: 获取物理状态 (即用户是否实际按住了按键). 如果没有安装键盘和/或鼠标钩子,则按键或鼠标按钮的物理状态通常和逻辑状态一致(有时逻辑状态可能比物理状态滞后);如果安装了钩子,则它会准确反映出用户是否按下了按键或鼠标按钮(只要在脚本执行时它正被按住)。您可以通过 KeyHistory 命令或菜单项确定脚本中是否使用了钩子。通过添加 "_InstallMouseHook.htm">#InstallMouseHook 指令到脚本中您可以强制安装钩子。
T: 获取切换状态 (仅对可以切换的按键才有效, 例如 Capslock, Numlock, Scrolllock 和 Insert). 获取的值为 D 表明按键是打开的, 而 U 表明它是关闭的 (不过 GetKeyState() 函数当打开时返回 true (1) 而关闭时返回 false (0)).
备注
为了等待按键或鼠标/操纵杆按钮进入新的状态, 通常用 KeyWait 代替 GetKeyState 的循环会更简单.
带有不常见键盘驱动的系统更新按键的状态可能比较慢, 尤其是像 Capslock 这样按键的切换状态. 在按键状态改变后立即对其状态进行检查的脚本可以预先使用 Sleep, 以便系统有时间更新按键的状态.
关于对操纵杆使用 GetKeyState 的例子, 请参阅 操纵杆重映射页面 和 操纵杆到鼠标的映射脚本.
相关
GetKeyState(), KeyWait, 按键列表, 操纵杆重映射, KeyHistory, "_InstallMouseHook.htm">#InstallMouseHook
示例
; 基本示例: GetKeyState, state, RButton ; 鼠标右键. GetKeyState, state, Joy2 ; 第一个操纵杆的第二个按钮. GetKeyState, state, Shift if state = D MsgBox At least one Shift key is down. else MsgBox Neither Shift key is down. GetKeyState, state, CapsLock, T ; 当 CapsLock 打开时为 D, 否则为 U. state := GetKeyState("Capslock", "T") ; 当 CapsLock 打开时为真, 否则为假. ; 重映射的例子 (这里只是为了演示因为使用 ; 内置的重映射功能 会更简单): ; 在下面的热键中, 当 NumpadAdd 按下时鼠标按钮会保持按住的状态, ; 这个热键把 NumpadAdd 映射为鼠标按钮. 此方法 ; 还可以用来在用户按住按键或按钮时重复一个动作: *NumpadAdd:: MouseClick, left,,, 1, 0, D ; 按住鼠标左键. Loop { Sleep, 10 GetKeyState, state, NumpadAdd, P if state = U ; 按键已经被释放, 所以退出循环. break ; ... 此处放置您想要重复的任何动作. } MouseClick, left,,, 1, 0, U ; 释放鼠标按钮. return ; 示例: 让操纵杆按钮根据操纵杆轴位置产生不同的反应. joy2:: GetKeyState, joyx, JoyX if joyx > 75 MsgBox Action #1 (button pressed while joystick was pushed to the right). else if joyx < 25 MsgBox Action #2 (button pressed while joystick was pushed to the left). else MsgBox Action #3 (button pressed while joystick was centered horizontally). return ; 请参阅 操纵杆重映射页面 和 操纵杆到鼠标的映射脚本 查看其他示例.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论