Python 键盘事件不考虑布局



我在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)

感谢您的帮助!

我敢打赌你需要在Win32 API中传递TranslateMessage。 根据 Windows 文档,仅触发键盘事件不会通过键盘布局映射事件;这需要与 TranslateMessage 分开完成,如果应用程序选择在如此低的级别工作,则需要明确执行。 我不确定win32api是否有这种方法,但四处阅读,看起来win32gui确实如此。

最新更新