You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ctypes.windll.user32.GetKeyState无法识别键盘普通按键仅能识别鼠标按键问题

问题原因

你遇到的问题是两个错误导致的,和API本身限制无关:

  • 键码类型使用错误:ctypes.windll.user32.GetKeyState接收的参数是Windows虚拟键码,不是字符的ASCII编码。你用ord('a')得到的97是小写字母a的ASCII值,键盘A键对应的虚拟键码是0x41(十进制65,等于ord('A')的返回值),所有字母键的虚拟键码都统一对应大写字母的ASCII值,和当前大小写锁定状态无关。
  • 返回值判断逻辑错误:GetKeyState返回的是16位有符号整数,按键按下时最高位为1,正确的判断方式是和0x8000做按位与运算,而不是判断返回值大于1。

修正后代码

import ctypes

def a_pressed():
    return ctypes.windll.user32.GetKeyState(ord('A')) & 0x8000 != 0

while True:
    if a_pressed():
        print('a is pressed')

补充说明

  • 检测其他字母键时,直接传入对应大写字母的ord()返回值即可,比如B键对应ord('B')
  • 检测功能键、方向键、小键盘按键等特殊按键时,需要查询Windows虚拟键码表对应值

内容的提问来源于stack exchange,提问作者Bituvo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:57:03