使用win32接口模擬按鍵事件,功能鍵需要加上掃描碼參數才生效
函數功能:該函數合成一次擊鍵事件。系統可使用這種合成的擊鍵事件來產生WM_KEYUP或WM_KEYDOWN消息,鍵盤驅動程序的中斷處理程序調用keybd_event函數。在Windows NT中該函數己被使用SendInput來替代它完成操作。
函數原型;VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);
參數:
bVk:定義一個虛擬鍵碼。鍵碼值必須在1~254之間。
bScan:定義該鍵的硬件掃描碼。
dwFlags:定義函數操作的各個方面的一個標志位集。應用程序可使用如下一些預定義常數的組合設置標志位。
KEYEVENTF_EXTENDEDKEY:若指定該值,則掃描碼前一個值為OXEO(224)的前綴字節。
KEYEVENTF_KEYUP:若指定該值,該鍵將被釋放;若未指定該值,該鍵將被按下。
dwExtralnfo:定義與擊鍵相關的附加的32位值。
返回值:該函數無返回值。
import win32api
import win32con
def send_key(bar_code):
bar_code and self.debug("ScanData:{}".format(bar_code))
old_ch = None
for ch in bar_code:
old_ch == ch and win32api.keybd_event(ord(ch), 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(ord(ch), 0, 0, 0)
old_ch = ch
win32api.keybd_event(ord(old_ch), 0, win32con.KEYEVENTF_KEYUP, 0)
# Enter 回鍵鍵需要加入掃描碼才生效
win32api.keybd_event(win32con.VK_RETURN, 0x1c, 0, 0)
win32api.keybd_event(win32con.VK_RETURN, 0x1c, win32con.KEYEVENTF_KEYUP, 0)