如何使用pywin32的sendmessage函数发送大写字母或数字字符?

0 投票
1 回答
4258 浏览
提问于 2025-04-17 20:34

有人能帮我吗?我用下面这个函数把小写字母从 a 到 z 发送到一个窗口时,运行得很好。但是,我不知道怎么发送大写字母 A 到 Z,或者数字 0 到 9。我试了很多次。

def post_keys(hwnd, i):
    win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, i, 0)
    win32api.SendMessage(hwnd, win32con.WM_KEYUP, i, 0)

非常感谢。

1 个回答

0

虚拟键码 0x41 代表的是“A”键本身,而不是字母“A”的特定大小写。如果没有按下Shift键,它对应的是小写的“a”。如果按下了Shift键,它对应的是大写的“A”。

要让字母显示为大写,你需要先发送一个 WM_KEYDOWN 消息,内容是虚拟键码 VK_SHIFT,然后再发送另一个 WM_KEYDOWN 消息,内容是字母的虚拟键码。

所以,你的代码应该像这样:

def post_keys(hwnd, i):
    win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, wincon.VK_SHIFT, 0)
    win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, i, 0)

    win32api.SendMessage(hwnd, win32con.WM_KEYUP, i, 0)
    win32api.SendMessage(hwnd, win32con.WM_KEYUP, wincon.VK_SHIFT, 0)

虚拟键码的完整列表可以在 这个MSDN页面 找到。

记住,这些码代表的是物理键盘上的按键,所以当你不确定该发送哪个码时,可以看看你的键盘,想想你是怎么输入特定字符的。还要注意,按键码转换成的实际字符会根据你选择的键盘布局有所不同。

举个例子,如果你使用的是EN_US键盘布局,要输入“%”,你需要先发送 VK_SHIFT,然后发送 0x35(也就是“5”键)。

撰写回答