鍵盤控制
需要用到keyboard 模塊(pip install keyboard )
按鍵字符
#字符'1''a'...#控制'ctrl''alt''shift''enter''esc''f1'...#方向鍵'up''down''left''right'#組合按鍵'ctrl'+'alt'+'a'...
常用方法
wait()
監(jiān)聽按鍵,如果沒設(shè)置按鍵,將會一直監(jiān)聽這句之前的按鍵;如果設(shè)置了按鍵,那么在按下該按鍵后就會停止監(jiān)聽,并執(zhí)行后面的語句,舉例:
import keyboard
print(0)
keyboard.wait('a')#在按下a之前后面的語句都不會執(zhí)行,下面同理print(1)
keyboard.wait('b')
print(2)
keyboard.wait('c')
print(3)
keyboard.wait()
結(jié)果:0123#繼續(xù)監(jiān)聽#只有按順序按下abc(中間過程隨便按不干擾)才能輸出0123,但因?yàn)樽詈笠粋€沒設(shè)置按鍵,所以會一直監(jiān)聽下去
add_hotkey()
設(shè)置熱鍵,一般和wait() 組合使用,在wait監(jiān)聽下,當(dāng)按下熱鍵時會執(zhí)行對應(yīng)函數(shù),舉例:
import keyboard #監(jiān)聽鍵盤def test_a():print('aaa')def test(x):print(x)if __name__ == '__main__':
keyboard.add_hotkey('f1', test_a)#按f1輸出aaakeyboard.add_hotkey('ctrl+alt', test, args=('b',))#按ctrl+alt輸出bkeyboard.wait()#wait里也可以設(shè)置按鍵,說明當(dāng)按到該鍵時結(jié)束
record()
記錄鍵盤事件,如果加上until參數(shù),可以設(shè)置當(dāng)按下某按鍵時結(jié)束監(jiān)聽,和wait方法有點(diǎn)像,舉例:
import keyboard
keyboard.add_hotkey('ctrl', print, args=('aaa',))
keyboard.add_hotkey('alt', print, args=('bbb',))
recorded = keyboard.record(until='esc')#當(dāng)按下esc時結(jié)束按鍵監(jiān)聽,并輸出所有按鍵事件print(recorded)
結(jié)果為:
aaa
aaa
bbb
[KeyboardEvent(ctrl down), KeyboardEvent(ctrl up), KeyboardEvent(ctrl down),
KeyboardEvent(ctrl up), KeyboardEvent(alt down), KeyboardEvent(alt up),
KeyboardEvent(esc down)]
hook()
綁定所有按鍵事件,當(dāng)只要有按鍵按下/松開時就會觸發(fā)的回調(diào)函數(shù),舉例:
import keyboarddef abc(x):print(x)
print("111")
keyboard.hook(abc)#按下任何按鍵時,都會調(diào)用abc,其中一定會傳一個值,就是鍵盤事件keyboard.wait()
結(jié)果:
KeyboardEvent(w down)111KeyboardEvent(w up)111KeyboardEvent(space down)111KeyboardEvent(space up)111KeyboardEvent(tab down)111KeyboardEvent(tab up)111KeyboardEvent(ctrl down)111...
KeyboardEvent()
一個按鍵事件,里面有3個常用參數(shù):event_type 、scan_code 、name ,分別代表按鍵類型(down /up )、按鍵號(每個鍵都有對應(yīng)的)和按鍵名,舉例:
import keyboarddef abc(x):a = keyboard.KeyboardEvent('down', 28, 'enter')#按鍵事件a為按下enter鍵,第二個參數(shù)如果不知道每個按鍵的值就隨便寫,#如果想知道按鍵的值可以用hook綁定所有事件后,輸出x.scan_code即可if x.event_type == 'down' and x.name == a.name:
print("你按下了enter鍵")#當(dāng)監(jiān)聽的事件為enter鍵,且是按下的時候keyboard.hook(abc)# keyboard.hook_key('enter', bcd)# recorded = keyboard.record(until='esc')keyboard.wait()
結(jié)果:
你按下了enter鍵
你按下了enter鍵
更多參考
https:///project/keyboard/
鼠標(biāo)控制
需要用到pyautogui 模塊(pip install pyautogui )
常用方法
position()
獲取鼠標(biāo)位置,舉例:
import pyautogui as pag #監(jiān)聽鼠標(biāo)x1, y1 = pag.position()
print(x1, y1)
#輸出鼠標(biāo)當(dāng)前位置
實(shí)例-結(jié)合鼠標(biāo)鍵盤截圖
(按下兩次alt+ctrl來確定圖片左上角和右上角,然后截圖保存)
import keyboard #監(jiān)聽鍵盤import pyautogui as pag #監(jiān)聽鼠標(biāo)from PIL import ImageGrab #截圖、讀取圖片、保存圖片if keyboard.wait(hotkey='ctrl+alt') == None:
x1, y1 = pag.position()if keyboard.wait(hotkey='ctrl+alt') == None:
x2, y2 = pag.position()
image = ImageGrab.grab((x1, y1, x2, y2))
image.save("screen.png")
click()
鼠標(biāo)點(diǎn)擊控制,舉例:
import pyautogui
pyautogui.click(button='right')#點(diǎn)擊鼠標(biāo)右鍵pyautogui.click(100, 100)#要在指定位置點(diǎn)擊左鍵
|