Python win32api keybd_event alt键卡住了

时间:2016-03-07 20:00:06

标签: python winapi

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

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

这应该按下ALT,按下,释放,ALT释放。但是,ALT永远不会发布。我已经尝试了上述顺序的所有组合,我尝试在每行之间放置timer.sleep(),我尝试再次击中KeyUp(18),我尝试使用0x12等而不是18,我也试着不要压抑ALT at所有。什么都行不通。

奇怪的是,在我的程序运行并且ALT键仍然卡住之后,修复它的唯一方法是在我的键盘上按下右键。右侧ATL和左侧ALT在win32api(18或0x12)中具有相同的名称,因此我无法使我的程序模型出现此行为。我觉得我已经用尽了所有的想法,有没有人有任何建议?

1 个答案:

答案 0 :(得分:0)

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

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}')