Python win32api keybd_event alt 键卡住
Posted
技术标签:
【中文标题】Python win32api keybd_event alt 键卡住【英文标题】:Python win32api keybd_event alt key gets stuck 【发布时间】: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。伪造输入很难有好的结果。 你应该首先关注你的窗口!然后发送你的热键.... 【参考方案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('UPENTER')
【讨论】:
以上是关于Python win32api keybd_event alt 键卡住的主要内容,如果未能解决你的问题,请参考以下文章