0

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

谢谢你的帮助 !

4

1 回答 1

0

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

于 2013-07-10T16:48:48.597 回答