根据指定的键盘按键或鼠标/控制器按钮是上还是下, 返回 1 (true) 或 0(false). 也检索控制器状态.
IsDown := GetKeyState(KeyName , Mode)
类型: 字符串
此参数可以是键盘中任何的单个字符或按键列表中的其中一个键名, 如一个鼠标/控制器按键. 例如: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.
或者, 可以指定明确的虚拟键代码, 例如 vkFF. 这在按键没有名字的罕见情况下很有用. 这种按键的代码可以通过按键列表页底部的步骤来确定. 请注意, 这个代码必须是十六进制的.
已知限制: 此函数不能区分两个共享相同虚拟键代码的键, 例如 Left 和 NumpadLeft.
类型: 字符串
获取控制器状态时, 此参数被忽略.
如果省略, 则默认获取按键的逻辑状态. 这是操作系统和活动窗口所认为的按键所处的状态, 但可能和按键的物理状态不一致.
否则, 请指定以下字母之一:
P: 获取物理状态( 即用户是否实际按住了按键). 按键或鼠标按键的物理状态通常和逻辑状态一致, 除非安装了键盘和/或鼠标钩子, 在这种情况下, 它将准确反映出用户是否按下了按键或鼠标按键(只要在脚本执行时按键正被按住). 您可以通过 KeyHistory 函数或菜单项来确定脚本中是否使用了钩子. 您可以通过调用 #InstallKeybdHook 和/或 #InstallMouseHook 函数来强制安装钩子.
T: 获取切换状态. 对于除 CapsLock, NumLock 和 ScrollLock 以外的键, 当脚本启动时, 切换状态一般为 0, 并且在进程之间不同步.
对于键盘键和鼠标按钮, 如果键位向下(或切换开启), 该函数返回 1(true) 如果键位向上(或切换关闭), 该函数返回 0(false).
当 KeyName 是手柄的轴, 如 JoyX, 函数返回一个 0 到 100 之间的浮点数, 用于指示手柄的位置为该轴运动范围的百分比. 这个测试脚本可以用来分析你的控制器.
当 KeyName 是 JoyPOV 时, 函数返回一个 0 到 35900 之间的整数. 许多控制器使用与下列近似的 POV 值:
当 KeyName 为 JoyName, JoyButtons, JoyAxes 或 JoyInfo, 检索值将是控制器的名称, 按钮数量, 轴数量或功能. 有关详情, 请参阅游戏控制器.
当 KeyName 是无法检测到的控制器的按钮或控制键时, 函数返回空字符串.
如果检测到无效参数, 则抛出 ValueError, 例如当前键盘布局中不存在 KeyName.
为了等待按键或鼠标/控制器按钮进入新的状态, 通常使用 KeyWait 代替 GetKeyState 的循环会更简单.
带有不常见键盘驱动的系统更新按键的状态可能比较慢, 尤其是像 CapsLock. 这样按键的切换状态. 在按键状态改变后立即对其状态进行检查的脚本可以预先使用 Sleep, 以便系统有时间更新按键的状态.
有关对控制器使用, 请参阅控制器重映射页面和控制器到鼠标的映射脚本.
GetKeyVK, GetKeySC, GetKeyName, KeyWait, Key List, Controller remapping, KeyHistory, InstallKeybdHook, InstallMouseHook
if GetKeyState("Shift") MsgBox "At least one Shift key is down." else MsgBox "Neither Shift key is down."
重映射. (此示例仅用于说明, 因为内置的重新映射功能更容易使用.) 在下面的热键中, 按下 NumpadAdd 时, 鼠标按钮被按住, 这有效地将 NumpadAdd 变成了一个鼠标按键. 该方法还可以用于重复操作, 而用户正在按住一个键或按键.
*NumpadAdd:: { MouseClick "left",,, 1, 0, "D" ; 按住鼠标左键. Loop { Sleep 10 if !GetKeyState("NumpadAdd", "P") ; 按键已经被释放, 所以退出循环. break ; ... 此处放置您想要重复的任何动作. } MouseClick "left",,, 1, 0, "U" ; 释放鼠标按钮. }
joy2:: { JoyX := GetKeyState("JoyX") if JoyX > 75 MsgBox "Action #1 (button pressed while stick was pushed to the right)." else if JoyX < 25 MsgBox "Action #2 (button pressed while stick was pushed to the left)." else MsgBox "Action #3 (button pressed while stick was centered horizontally)." }
请参阅控制器重映射页面和控制器到鼠标的映射脚本的其他示例.