检查键盘按键或鼠标/操纵杆按键是否按下或放开. 也可以获取操纵杆的状态.
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 值:
为了等待按键或鼠标/操纵杆按钮进入新的状态, 通常使用 KeyWait 代替 GetKeyState 的循环会更简单.
带有不常见键盘驱动的系统更新按键的状态可能比较慢, 尤其是像 CapsLock. 这样按键的切换状态. 在按键状态改变后立即对其状态进行检查的脚本可以预先使用 Sleep, 以便系统有时间更新按键的状态.
有关对操纵杆使用, 请参阅操纵杆重映射页面和操纵杆到鼠标的映射脚本.
GetKeyVK, GetKeySC, GetKeyName, KeyWait, Key List, Joystick 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 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)." }
请参阅操纵杆重映射页面和操纵杆到鼠标的映射脚本的其他示例.
unixetc