如何使用pywin32的sendmessage函数发送大写字母或数字字符?
有人能帮我吗?我用下面这个函数把小写字母从 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”键)。