Python 模擬Windows按鍵事件

使用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)

參考
掃描碼
keybd_event百科
鍵盤硬件掃描碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章