【问题标题】:Python send keys on windowsPython在Windows上发送密钥
【发布时间】:2011-10-14 04:46:44
【问题描述】:

我正在尝试在 Windows 机器上通过 python 2.7 发送键盘命令。我了解 SendKeys 模块不适用于 2.7。所以我改用 win32 api 中的 keybd_event 。

我要发送的键是 shift+left 来选择一个单词。这是代码:

win32api.keybd_event(win32con.VK_LSHIFT,0,win32con.KEYEVENTF_EXTENDEDKEY | 0,0)
win32api.keybd_event(win32con.VK_LEFT,0,0,0)
win32api.keybd_event(win32con.VK_LSHIFT,0,win32con.KEYEVENTF_EXTENDEDKEY | win32con.KEYEVENTF_KEYUP,0)

这一切都有效。但是,shift键一直被按下!即使在我终止进程之后。之后释放 shift 键的唯一方法是物理按下大写锁定,然后按 shift + a 键,然后关闭大写锁定。它与这个问题非常相似:http://www.bigresource.com/Tracker/Track-vb-RvVMlrAbZn/

你知道该怎么做吗?

提前致谢!

【问题讨论】:

  • 我猜测这是因为您将 0 作为扫描码(第二个参数)传递。尝试调用 scanCode = MapVirtualKey(VK_LSHIFT, MAPVK_VK_TO_VSC) 并将其传递给 keybd_event 方法。
  • 感谢您的回复。我刚刚尝试过:scanCode = win32api.MapVirtualKey(win32con.VK_LSHIFT, 0) 我在那里设置了一个零,因为我找不到 MAPVK_VK_TO_VSC。但是,不幸的是它仍然无法正常工作。
  • 调用后scanCode中的值是多少?

标签: python winapi sendkeys


【解决方案1】:

虽然我找不到让 win32api 与 shift 一起使用的方法,但我现在正在使用来自 http://code.google.com/p/sendkeys-ctypes/ 的 SendKeys,这似乎适用于 2.7。

【讨论】:

    【解决方案2】:

    Windows API 中的 SendInput 可能会有所帮助。最近的 Raymond Chen 博客文章建议您甚至可以使用它来控制屏幕保护程序的启动/停止。

    【讨论】:

    • 您有参考链接吗?谢谢。
    【解决方案3】:

    您可以尝试pywin32 包,请注意它是旧的且未维护的。

    这里是an example from StackOverflow

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      相关资源
      最近更新 更多