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 键卡住的主要内容,如果未能解决你的问题,请参考以下文章

个人备份

使用 win32api keybd_event 选择文本

Python 下载win32api 模块

转 python win32api操作

python可以直接调用win32的api吗

按键shift怎么在python表示