<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1632085368384154" crossorigin="anonymous"></script><script src="https://autohotkey.top/gtag.js"></script></head> <body> <h1>GetKeyState</h1> <p>根据指定的键盘按键或鼠标/控制器按钮是上还是下, 返回 1 (true) 或 0(false). 也检索控制器状态.</p> <pre class="Syntax">IsDown := <span class="func">GetKeyState</span>(KeyName <span class="optional">, Mode</span>)</pre> <h2 id="Parameters">参数</h2> <dl> <dt>KeyName</dt> <dd> <p>类型: <a href="../Concepts.htm#strings">字符串</a></p> <p>此参数可以是键盘中任何的单个字符或<a href="../KeyList.htm">按键列表</a>中的其中一个键名, 如一个鼠标/控制器按键. 例如: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.</p> <p>或者, 可以指定明确的虚拟键代码, 例如 vkFF. 这在按键没有名字的罕见情况下很有用. 这种按键的代码可以通过<a href="../KeyList.htm#SpecialKeys">按键列表页</a>底部的步骤来确定. 请注意, 这个代码必须是十六进制的.</p> <p><b>已知限制:</b> 此函数不能区分两个共享相同虚拟键代码的键, 例如 Left 和 NumpadLeft.</p> </dd> <dt>Mode</dt> <dd> <p>类型: <a href="../Concepts.htm#strings">字符串</a></p> <p>获取控制器状态时, 此参数被忽略.</p> <p>如果未设置或省略, 则模式默认是获取按键的逻辑状态. 这是操作系统和活动窗口所认为的按键所处的状态, 但可能和按键的物理状态不一致.</p> <p>否则, 请指定以下字母之一:</p> <p><strong>P:</strong> 获取物理状态( 即用户是否实际按住了按键). 按键或鼠标按键的物理状态通常和逻辑状态一致, 除非安装了键盘和/或鼠标钩子, 在这种情况下, 它将准确反映出用户是否按下了按键或鼠标按键(只要在脚本执行时按键正被按住). 您可以通过 <a href="KeyHistory.htm">KeyHistory</a> 函数或菜单项来确定脚本中是否使用了钩子. 您可以通过调用 <a href="InstallKeybdHook.htm">#InstallKeybdHook</a> 和/或 <a href="InstallMouseHook.htm">#InstallMouseHook</a> 函数来强制安装钩子.</p> <p><strong>T:</strong> 获取切换状态. 对于除 <kbd>CapsLock</kbd>, <kbd>NumLock</kbd> 和 <kbd>ScrollLock</kbd> 以外的键, 当脚本启动时, 切换状态一般为 0, 并且在进程之间不同步.</p> </dd> </dl> <h2 id="Return_Value">返回值</h2> <p>类型: <a href="../Concepts.htm#boolean">整数(布尔值)</a>, <a href="../Concepts.htm#numbers">浮点数</a>, <a href="../Concepts.htm#numbers">整数</a>或<a href="../Concepts.htm#nothing">字符串(空值)</a></p> <p>对于键盘键和鼠标按钮, 如果键位向下(或切换开启), 该函数返回 1(true) 如果键位向上(或切换关闭), 该函数返回 0(false).</p> <p>当 <em>KeyName</em> 是控制器的轴, 如 JoyX, 函数返回一个 0 到 100 之间的<a href="../Concepts.htm#numbers">浮点数</a>, 用于指示控制器的位置为该轴运动范围的百分比. 这个<a href="../scripts/index.htm#ControllerTest">测试脚本</a>可以用来分析你的控制器.</p> <p>当 <em>KeyName</em> 是 JoyPOV 时, 函数返回一个 0 到 35900 之间的<a href="../Concepts.htm#numbers">整数</a>. 许多控制器使用与下列近似的 POV 值:</p> <ul> <li>-1: 没有角度</li> <li>0: 向前 POV</li> <li>9000(即 90 度): 向右 POV</li> <li>27000(即 270 度): 向左 POV</li> <li>18000 (即 180 度): 向后 POV</li> </ul> <p>当 <em>KeyName</em> 为 JoyName, JoyButtons, JoyAxes 或 JoyInfo, 检索值将是控制器的名称, 按钮数量, 轴数量或功能. 有关详情, 请参阅<a href="../KeyList.htm#Controller">游戏控制器</a>.</p> <p>当 <em>KeyName</em> 是无法检测到的控制器的按钮或控制键时, 函数返回空字符串.</p> <h2 id="Error_Handling">错误处理</h2> <p>如果检测到无效参数, 则抛出 <a href="Error.htm#ValueError">ValueError</a>, 例如当前键盘布局中不存在 <em>KeyName</em>.</p> <h2 id="Remarks">备注</h2> <p>为了等待按键或鼠标/控制器按钮进入新的状态, 通常使用 <a href="KeyWait.htm">KeyWait</a> 代替 GetKeyState 的循环会更简单.</p> <p>带有不常见键盘驱动的系统更新按键的状态可能比较慢, 尤其是像 <kbd>CapsLock</kbd>. 这样按键的切换状态. 在按键状态改变后立即对其状态进行检查的脚本可以预先使用 <a href="Sleep.htm">Sleep</a>, 以便系统有时间更新按键的状态.</p> <p>有关对控制器使用, 请参阅<a href="../misc/RemapController.htm">控制器重映射页面</a>和<a href="../scripts/index.htm#ControllerMouse">控制器到鼠标的映射脚本</a>.</p> <h2 id="Related">相关</h2> <p><a href="GetKeyVK.htm">GetKeyVK</a>, <a href="GetKeySC.htm">GetKeySC</a>, <a href="GetKeyName.htm">GetKeyName</a>, <a href="KeyWait.htm">KeyWait</a>, <a href="../KeyList.htm">Key List</a>, <a href="../misc/RemapController.htm">Controller remapping</a>, <a href="KeyHistory.htm">KeyHistory</a>, <a href="InstallKeybdHook.htm">InstallKeybdHook</a>, <a href="InstallMouseHook.htm">InstallMouseHook</a></p> <h2 id="Examples">示例</h2> <div class="ex" id="ExBasic"> <p><a class="ex_number" href="#ExBasic"></a> 检索鼠标右键的当前状态.</p> <pre>state := GetKeyState("RButton")</pre> </div> <div class="ex" id="ExBasic2"> <p><a class="ex_number" href="#ExBasic2"></a> 检索首个控制器的第二个按钮的当前状态.</p> <pre>state := GetKeyState("Joy2")</pre> </div> <div class="ex" id="ExIfElse"> <p><a class="ex_number" href="#ExIfElse"></a> 检查是否至少有一个 <kbd>Shift</kbd> 被关闭.</p> <pre>if GetKeyState("Shift") MsgBox "At least one Shift key is down." else MsgBox "Neither Shift key is down."</pre> </div> <div class="ex" id="ExToggle"> <p><a class="ex_number" href="#ExToggle"></a> 读取 <kbd>CapsLock</kbd> 的当前切换状态.</p> <pre>state := GetKeyState("CapsLock", "T")</pre> </div> <div class="ex" id="ExRemap"> <p><a class="ex_number" href="#ExRemap"></a>重映射. (此示例仅用于说明, 因为<a href="../misc/Remap.htm">内置的重新映射功能</a>更容易使用.) 在下面的热键中, 按下 NumpadAdd 时, 鼠标按钮被按住, 这有效地将 NumpadAdd 变成了一个鼠标按键. 该方法还可以用于重复操作, 而用户正在按住一个键或按键.</p> <pre>*NumpadAdd:: { MouseClick "left",,, 1, 0, "D" <em>; 按住鼠标左键.</em> Loop { Sleep 10 if !GetKeyState("NumpadAdd", "P") <em>; 按键已经被释放, 所以退出循环.</em> break <em>; ... 此处放置您想要重复的任何动作.</em> } MouseClick "left",,, 1, 0, "U" <em>; 释放鼠标按钮.</em> }</pre> </div> <div class="ex" id="ExController"> <p><a class="ex_number" href="#ExController"></a> 使控制器按钮的行为取决于操纵杆轴的位置.</p> <pre>joy2:: { JoyX := GetKeyState("JoyX") if JoyX &gt; 75 MsgBox "Action #1 (button pressed while stick was pushed to the right)." else if JoyX &lt; 25 MsgBox "Action #2 (button pressed while stick was pushed to the left)." else MsgBox "Action #3 (button pressed while stick was centered horizontally)." }</pre> </div> <p>请参阅<a href="../misc/RemapController.htm">控制器重映射页面</a>和<a href="../scripts/index.htm#ControllerMouse">控制器到鼠标的映射脚本</a>的其他示例.</p> <a href="https://dftg.net">dftg</a><!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "d5a9c4fcb9b6482fa53ce820d892f969"}'></script><!-- Cloudflare Pages Analytics --><script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"rayId":"95bb1ac22ff2a1db","version":"2025.6.2","r":1,"serverTiming":{"name":{"cfExtPri":true,"cfEdge":true,"cfOrigin":true,"cfL4":true,"cfSpeedBrain":true,"cfCacheStatus":true}},"token":"51750bb5dc4f40cc91a5ec55c63bbc01","b":1}' crossorigin="anonymous"></script> </body> </html>