【问题标题】:Python keyboard event does not respect layoutPython键盘事件不尊重布局
【发布时间】:2013-07-10 16:13:02
【问题描述】:

我在 python 中遇到了 win32api.keybd_event 的问题(请参阅下面的脚本):

在 EN 布局下,脚本按“q”键,然后按“1”键(似乎没问题)。

在 FR 布局下,脚本按“q”键,然后按“&”键(而不是“a”和“&”)。

布局翻译部分完成看起来很奇怪。

这是测试样本:

import win32api
import ctypes
import win32con
import time

def play(vk):
    s = ctypes.windll.user32.MapVirtualKeyA(vk, 0)
    win32api.keybd_event(vk, s, 0, 0)
    time.sleep(0.1)
    win32api.keybd_event(vk, s, win32con.KEYEVENTF_KEYUP, 0)
    time.sleep(0.7)

vk_key_Q = int('0x51', 16)
vk_key_1 = int('0x31', 16)

while True:
    play(vk_key_Q)
    play(vk_key_1)

感谢您的帮助!

【问题讨论】:

    标签: python windows winapi


    【解决方案1】:

    我敢打赌,您需要通过 Win32 API 中的TranslateMessage。根据 Windows 文档,仅触发键盘事件不会通过键盘布局映射事件;这需要使用TranslateMessage 单独完成,如果应用程序选择在这么低的级别上工作,则需要明确执行这些操作。我不确定win32api 是否有该方法可用,但仔细阅读,它看起来像win32gui 有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 2018-04-02
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      相关资源
      最近更新 更多