2016-03-07 84 views
2

我在使用ALT鍵的win32api keybd_event時遇到了一些麻煩。我正在自動執行一個需要我按ALT-r打開菜單的流程。唯一的問題是,一旦ALT-r被擊中,ALT鍵就不會釋放,因此所有後續操作都會發生,就像alt鍵被按下一樣。我正在使用KeyDown和KeyUp的順序:Python win32api keybd_event alt key卡住

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

這應該做ALT按下,r按下,r釋放,ALT釋放。但是,ALT從不釋放。我嘗試了以上命令的所有組合,我嘗試了在每行之間放置timer.sleep(),我試着再次敲擊KeyUp(18),並嘗試使用0x12等而不是18,並且我也試着不壓低ALT所有。什麼都沒有

奇怪的是,我的程序運行後,ALT鍵仍然卡住,修復它的唯一方法是敲擊鍵盤上的右鍵。正確的ATL和左ALT在win32api(18或0x12)中都有相同的名稱,所以我不能讓我的程序模型成爲這種行爲。我覺得我已經用盡了所有的想法,有沒有人有任何建議?

+3

如果您需要自動化的GUI,使用[UI自動化(https://開頭MSDN。 microsoft.com/en-us/library/windows/desktop/ee684009.aspx)。僞造輸入很難結束。 – IInspectable

+0

你應該首先關注你的窗口!然後發送你的熱鍵.... – DRPK

回答

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