python之模擬鍵盤
- 2019 年 10 月 8 日
- 筆記
對於python來說,模擬鍵盤的方式據我了解有三種方式,其中有pyuserinput,win32api,以及winio。
其中第一種可以應用普通的程序或者桌面的鍵盤輸入,第二和第三則是比較接近底層的模擬鍵盤,如果想做遊戲的腳本便可以用第二和第三種,順便一提第三種只使用圓孔的ps/2的鍵盤,第二種win32api親測可以用於製作模擬dnf鍵盤移動的腳本。
Pyuserinput
要使用Pysuerinput之前需要一些準備,安裝好相關的庫,先安裝pywin32,以及pyHook,然後再安裝pyuserinput
import pymouse,pykeyboard,os,sys from pymouse import * from pykeyboard import PyKeyboard m = PyMouse() k = PyKeyboard() #鼠標操作: m.click(x,y,button,n) #鼠標點擊 #x,y –是坐標位置 #buttong – 1表示左鍵,2表示點擊右鍵 #n – 點擊次數,默認是1次,2表示雙擊 m.move(x,y) #–鼠標移動到坐標(x,y) x_dim, y_dim = m.screen_size() #–獲得屏幕尺寸 #鍵盤操作: k.type_string(『Hello, Python!』)# –模擬鍵盤輸入字符串 k.press_key(『A』) #–模擬鍵盤按A鍵 k.release_key(『A』)# –模擬鍵盤鬆開A鍵 k.tap_key(「B」) #–模擬點擊B鍵 k.tap_key(『H』,n=2,interval=5)#–模擬點擊H鍵,2次,每次間隔5秒 k.tap_key(k.function_keys[5]) #–點擊功能鍵F5 k.tap_key(k.numpad_keys[5],3) #–點擊小鍵盤5,3次 #聯合按鍵模擬 #例如同時按alt+tab鍵盤 k.press_key(k.alt_key)# –按住alt鍵 k.tap_key(k.tab_key) #–點擊tab鍵 k.release_key(k.alt_key)# –鬆開alt鍵
以上便是有關Pysuerinput的相關操作,並不是很難理解,一些方法也相當方便我們使用。
win32api:
準備:安裝好pywin32,pip insatall pywin32
然後使用時
import win32api
import win32con #導入這兩個模塊
import time #導入時間模塊要有中斷時間
import ctypes
以下是我自己的模擬按鍵按下抬起的方法:
def keydownup(num): MapVirtualKey = ctypes.windll.user32.MapVirtualKeyA time.sleep(0.4) win32api.keybd_event(num, MapVirtualKey(num, 0), 0, 0) time.sleep(0.2) win32api.keybd_event(num, MapVirtualKey(num, 0), win32con.KEYEVENTF_KEYUP, 0)
其中MapVirtualkey是掃描碼,一般不使用這個,如果要製作控制遊戲人物的腳本時一定要填入掃描碼才能在遊戲中實現硬件級鍵盤模擬。
方法很簡單
win32api.keybd_event(虛擬碼,掃描碼,0,0)
第一個參數是虛擬碼有一些是不太一樣的,需要自己根據自己的電腦測出相關的虛擬碼,其中一些虛擬碼,
left_arrow = 0x61 up_arrow = 0x65 right_arrow = 0x63 down_arrow = 0x62 a = 0x41 d = 0x44 x = 0x58
第二個參數是掃描碼,如果一個一個去尋找掃描碼會很麻煩,可以像我那樣,在方法開始處或者程序起始處添加這麼一句
MapVirtualKey = ctypes.windll.user32.MapVirtualKeyA
然後就可以傳入虛擬碼來尋找相應的掃描碼
第三個是參數是作為判斷按下與抬起的標識,按下時為0即可,因為鍵盤的全過程是按下與抬起,所有兩個keybd_event才是一個完整的過程,其中一定要給其中添加一個時間暫停的,不然還是無法使用,即使在操作台或者pycharm上可以輸入,在遊戲中便沒有效果了,時間自己可以傳參數進去,也可以規定一個固定的值,這個時間便是你按住的時間
第四個參數直接為0即可
最重要的一點,如果要在遊戲中使用,一定要以管理員的權限運行腳本,這樣才可以使用。
winio:
這是一個調用第三方的庫來模擬硬件級模擬鍵盤,由於我使用win32api已經做到了相關的要求,所有沒有詳細去了解。由於現在的鍵盤都是usb口,所有winio的不是很方便,有點受限硬件。
—————人生苦短,我用python