【问题标题】:how to use pywin32 sendmessage function to send a upper char or number char?如何使用 pywin32 sendmessage 函数发送大写字符或数字字符?
【发布时间】:2014-04-04 03:21:42
【问题描述】:

任何人都可以帮助我吗?当我使用跟随功能将较低的字符(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)

非常感谢。

【问题讨论】:

标签: python keyboard pywin32 sendmessage


【解决方案1】:

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

要使字母显示为大写,您必须先发送带有虚拟键代码VK_SHIFTWM_KEYDOWN 消息,然后再发送带有该字母虚拟键代码的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)

可以在this MSDN page 找到完整的虚拟键代码列表。

请记住,它们代表物理键盘按键,因此当您不确定要发送哪个代码时,只需查看您的键盘以了解如何键入特定字符。请记住,键码被翻译成的实际字符会因您选择的键盘布局而异。

例如,对于 EN_US 键盘布局,要发送“%”,您应先发送VK_SHIFT,然后发送0x35(“5”键)。

【讨论】:

  • 您的最后一行很明显,这取决于您使用的键盘布局。例如,VK_SHIFT 加上“9”键会在我的键盘上生成一个)(西班牙语),但如果是英文,可能会在你的键盘上生成一个(
  • @Hyperboreus,是的,链接到的 MSDN 页面提到了一些关键代码。您可以使用GetKeyNameText 函数来检索给定键码的键名。但是,使用带有WM_KEYDOWN 的SendMessage 确实只适用于箭头键等基本键码。如果您想在键盘按下时发送任意文本字符串,您应该使用带有适当填充的 KEYBDINPUT 结构的 SendInput(dwFlags 应该设置为 KEYEVENTF_UNICODE),但这不是问题所要求的。
  • 非常感谢 alldayremix 和 Hyperboreus。现在它运行良好。
猜你喜欢
  • 2020-09-20
  • 2013-11-09
  • 2021-11-02
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多