實踐證明 pyinput會被游戲屏蔽
winio只適合PS/2 圓口鍵盤
下面使用
參考:https://mp.weixin.qq.com/s/WXf5JVyyFZqp-DYlGigL-g
win32api:
準(zhǔn)備:安裝好pywin32,,pip insatall pywin32
然后使用時
import win32api
import win32con #導(dǎo)入這兩個模塊
import time #導(dǎo)入時間模塊要有中斷時間
import ctypes
MapVirtualKey = ctypes.windll.user32.MapVirtualKeyA win32api.keybd_event(num, MapVirtualKey(num, 0), 0, 0) win32api.keybd_event(num, MapVirtualKey(num, 0), win32con.KEYEVENTF_KEYUP, 0)
其中MapVirtualkey是掃描碼,一般不使用這個,,如果要制作控制游戲人物的腳本時一定要填入掃描碼才能在游戲中實現(xiàn)硬件級鍵盤模擬。
方法很簡單
win32api.keybd_event(虛擬碼,,掃描碼,,0,0)
第一個參數(shù)是虛擬碼有一些是不太一樣的,,需要自己根據(jù)自己的電腦測出相關(guān)的虛擬碼,,其中一些虛擬碼,
第二個參數(shù)是掃描碼,,如果一個一個去尋找掃描碼會很麻煩,,可以像我那樣,,在方法開始處或者程序起始處添加這么一句
MapVirtualKey = ctypes.windll.user32.MapVirtualKeyA
然后就可以傳入虛擬碼來尋找相應(yīng)的掃描碼
第三個是參數(shù)是作為判斷按下與抬起的標(biāo)識,按下時為0即可,,因為鍵盤的全過程是按下與抬起,,所有兩個keybd_event才是一個完整的過程,其中一定要給其中添加一個時間暫停的,,不然還是無法使用,,即使在操作臺或者pycharm上可以輸入,在游戲中便沒有效果了,,時間自己可以傳參數(shù)進(jìn)去,,也可以規(guī)定一個固定的值,這個時間便是你按住的時間
第四個參數(shù)直接為0即可
最重要的一點,,如果要在游戲中使用,,一定要以管理員的權(quán)限運行腳本,這樣才可以使用,。
參考自:https://blog.csdn.net/qq_33371343/article/details/78916751
一、pywin32常用函數(shù) (1)獲取鼠標(biāo)位置 win32api.GetCursorPos()
(2)鼠標(biāo)左鍵按下 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
(3)鼠標(biāo)左鍵放開 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
(4)鼠標(biāo)右鍵按下 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
(5)鼠標(biāo)右鍵放開 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
(6)設(shè)置鼠標(biāo)位置 win32api.SetCursorPos((x, y))
(7)鍵盤輸入事件 win32api.keybd_event(VK_CODE[word], 0, 0, 0) win32api.keybd_event(VK_CODE[word], 0, win32con.KEYEVENTF_KEYUP, 0)
二,、封裝接口 (1)獲取當(dāng)前鼠標(biāo)位置 def cursor_point(self): ''' 獲取當(dāng)前鼠標(biāo)位置 ''' pos = win32api.GetCursorPos() return int(pos[0]), int(pos[1])
(2)鼠標(biāo)左擊事件 def mouse_left_click(self, new_x=None, new_y=None, times=1): ''' 鼠標(biāo)左擊事件 :param new_x: 新移動的坐標(biāo)x軸坐標(biāo) :param new_y: 新移動的坐標(biāo)y軸坐標(biāo)1506240215 :param times: 點擊次數(shù) ''' self.mouse_move(new_x, new_y) time.sleep(0.05) while times: win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) times -= 1
(3)鼠標(biāo)右擊事件 def mouse_right_click(self, new_x=None, new_y=None): ''' 鼠標(biāo)右擊事件 :param new_x: 新移動的坐標(biāo)x軸坐標(biāo) :param new_y: 新移動的坐標(biāo)y軸坐標(biāo) ''' self.mouse_move(new_x, new_y) time.sleep(0.05) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
(4)移動鼠標(biāo)位置 def mouse_move(self, new_x, new_y): if new_y is not None and new_x is not None: point = (new_x, new_y) win32api.SetCursorPos(point) self.x = new_x self.y = new_y
(5)鍵盤輸入文本 def key_input(self, input_words=''): for word in input_words: win32api.keybd_event(VK_CODE[word], 0, 0, 0) win32api.keybd_event(VK_CODE[word], 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(0.1)
(6)鍵盤輸入事件 def key_even(self, input_key): win32api.keybd_event(VK_CODE[input_key], 0, 0, 0) win32api.keybd_event(VK_CODE[input_key], 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1)
|