【问题标题】:Python win32api keybd_event alt key gets stuckPython win32api keybd_event alt 键卡住
【发布时间】:2016-03-07 20:00:05
【问题描述】:

我在使用 ALT 键的 win32api keybd_event 时遇到了一些问题。我正在自动化一个需要我按 ALT-r 打开菜单的过程。唯一的问题是,一旦按下 ALT-r,ALT 键就不会释放,因此所有后续操作都会像按住 alt 键一样发生。我按以下顺序使用 KeyDown 和 KeyUp:

KeyDown(18)
KeyDown(82)
KeyUp(82)
KeyUp(18)

这应该做 ALT 按下,r 按下,r 释放,ALT 释放。但是,ALT 从不释放。我已经尝试了上述顺序的所有组合,我尝试将 timer.sleep() 放在每行之间,我尝试再次点击 KeyUp(18),我尝试使用 0x12 等而不是 18,我也尝试不按下 ALT全部。没有任何效果。

奇怪的是,在我的程序运行后,他的 ALT 键仍然卡住,修复它的唯一方法是在我的键盘上按右 alt。右 ATL 和左 ALT 在 win32api(18 或 0x12)中都有相同的名称,所以我不能让我的程序模拟这种行为。我觉得我已经用尽了所有的想法,有人有什么建议吗?

【问题讨论】:

  • 如果您需要自动化 GUI,请使用 UI Automation。伪造输入很难有好的结果。
  • 你应该首先关注你的窗口!然后发送你的热键....

标签: python winapi


【解决方案1】:

试试这个(你应该首先关注你当前的窗口,然后发送你的热键):

import win32com.client
import win32gui
import win32process
import win32api

hwnd = win32gui.GetForegroundWindow()

_, pid = win32process.GetWindowThreadProcessId(hwnd) # hwnd is your window id

shell = win32com.client.Dispatch("WScript.Shell")

shell.AppActivate(pid)

win32api.sleep(1000)

shell.SendKeys('{UP}{ENTER}')

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多