日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python使用pynput庫操作、監控你的鼠標和鍵盤

瀏覽:31日期:2022-06-25 15:13:30
楔子

python是一門很神奇的語言,原因在于它有很多的庫可以實現各種意想不到的功能。當然我們這次介紹的庫所實現的功能卻是已經很常見了,就是操作、監控你的鼠標和鍵盤。如果你寫過游戲,那么即使不用下面即將介紹的庫也可以實現對鼠標、鍵盤的操作以及監控。

當然我們下面介紹庫:pynput,是專門針對鼠標和鍵盤的,至于pygame、pyglet等游戲框架雖然也提供了鼠標、鍵盤的監控事件,但它們畢竟是用來開發游戲的,還提供了創建窗口、圖形繪制、物體的碰撞檢測等等很多復雜的功能。如果只是單純的操作鼠標和鍵盤,使用這種游戲框架有點小題大做了,下面我們就來看看這個名叫pynput的模塊吧,看看它的使用方法。

鼠標操作鼠標

鼠標無非就是'點擊按住不放'、'松開'、'雙擊'(針對左右鍵),滑動滾輪,移動鼠標等等,這些功能已經基本上覆蓋百分之八九十的日常使用了。至于剩下的一小部分,可能就是打游戲用到的'側鍵',但是我們不介紹那么多,先來看看常用的吧。

from pynput.mouse import Button, Controller# 實例化Controller得到一個可以操作鼠標的對象mouse = Controller()# mouse.position: 獲取當前鼠標位置。# 屏幕左上角坐標為(0, 0) 右下角為(屏幕寬度, 屏幕高度)print(f'當前鼠標位置: {mouse.position}') # 當前鼠標位置: (881, 467)# 給mouse.position賦值等于移動鼠標,這里相當于移動到(100, 100)的位置# 如果坐標小于0,那么等于0。如果超出屏幕范圍,那么等于最大范圍mouse.position = (100, 100) # 此方法等價于mouse.move(100, 100)print(f'當前鼠標位置: {mouse.position}') # 當前鼠標位置: (100, 100)# 按下左鍵,同理Button.right是右鍵mouse.press(Button.left)# 松開左鍵mouse.release(Button.left)# 上面兩行連在一起等于一次單擊。如果上面兩行緊接著再重復一次,那么整體會實現雙擊的效果# 因為兩次單擊是連續執行的,沒有等待時間。如果中間來一個time.sleep幾秒,那么就變成兩次單擊了# 當然鼠標點擊我們有更合適的辦法,使用click函數# 該函數接收兩個參數:點擊鼠標的哪個鍵、以及點擊次數# 這里連續點擊兩次,等于雙擊mouse.click(Button.right, 2)

還有一個功能比較常見,我們需要拿出來單獨說,是因為這個需要找張圖片來演示。

python使用pynput庫操作、監控你的鼠標和鍵盤

這種情況我們如果想知道更多內容,需要向下滑動,也就是沿著y軸滑動

from pynput.mouse import Controllermouse = Controller()# 垂直方向、沿著y軸滑動# 第一個參數是針對水平方向的,暫時不用管,為0則表示不變。# 第二個參數是針對垂直方向的,大于0表示向下,小于0表示向上mouse.scroll(0, 2)

我們上面是向下移動兩個step,什么是step呢?

python使用pynput庫操作、監控你的鼠標和鍵盤

點擊一次就會移動一個step

python使用pynput庫操作、監控你的鼠標和鍵盤

同理這個就是在水平方向上移動

from pynput.mouse import Controllermouse = Controller()# 大于0向右,小于0向左mouse.scroll(3, 0)

可能有人好奇,可不可以水平、垂直兩個方向同時移動呢?答案是不可以,因為這是模擬人來點擊,無非就是效率的問題,所以也要符合常理,因為我們平時用鼠標顯然不可能兩個方向同時移動。

監控鼠標

我們可以使用pynput操作鼠標,同時pynput也支持我們在手動操作鼠標的時候記錄我們做了哪些操作,同理后面介紹的鍵盤也是一樣的,都分為操作、監控兩部分。

from pynput.mouse import Listenerdef on_move(x, y): print(f'鼠標移動到: ({x}, {y})')def on_click(x, y, button, is_press): print(f'鼠標{button}鍵在({x}, {y})處{’按下’ if is_press else ’松開’}')def on_scroll(x, y, dx, dy): if dx: print(f'滑輪在({x}, {y})處向{’右’ if dx > 0 else ’左’}滑') else: print(f'滑輪在({x}, {y})處向{’下’ if dy > 0 else ’上’}滑')with Listener( # 上面函數名不能變,記得對應 on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener: listener.join()'''鼠標移動到: (1090, 369)鼠標移動到: (1090, 368)鼠標移動到: (1090, 368)鼠標移動到: (1090, 367)鼠標Button.left鍵在(1090, 367)處按下鼠標Button.left鍵在(1090, 367)處松開滑輪在(1090, 367)處向上滑'''

上面實例化一個Listener時,相當于開啟了一個線程,因為Listener這個類繼承自threading.Thread。所以我們調用listener.join()相當于就阻塞在這里了,會一直監控鼠標事件。所以我們需要一個機制來讓它停下來:

from pynput.mouse import Listener, Buttondef on_move(x, y): print(f'鼠標移動到: ({x}, {y})')def on_click(x, y, button, is_press): if button == Button.right: # 一旦當某個事件返回了False,那么就會停止了 # 這里我們選擇右鍵吧 print('點擊右鍵,停止監控') return False print(f'鼠標{button}鍵在({x}, {y})處{’按下’ if is_press else ’松開’}')def on_scroll(x, y, dx, dy): if dx: print(f'滑輪在({x}, {y})處向{’右’ if dx > 0 else ’左’}滑') else: print(f'滑輪在({x}, {y})處向{’下’ if dy > 0 else ’上’}滑')with Listener( on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener: listener.join()'''鼠標Button.left鍵在(881, 606)處按下鼠標Button.left鍵在(881, 606)處松開點擊右鍵,停止監控'''

另外執行的時候,你會發現,程序會一直阻塞在listener.join()處,如果下面還有代碼要怎么執行呢?

from pynput.mouse import Listenerdef on_move(x, y): print(f'鼠標移動到: ({x}, {y})')def on_click(x, y, button, is_press): print(f'鼠標{button}鍵在({x}, {y})處{’按下’ if is_press else ’松開’}')def on_scroll(x, y, dx, dy): if dx: print(f'滑輪在({x}, {y})處向{’右’ if dx > 0 else ’左’}滑') else: print(f'滑輪在({x}, {y})處向{’下’ if dy > 0 else ’上’}滑')listener = Listener( on_move=on_move, on_click=on_click, on_scroll=on_scroll)# 啟動線程,主線程會繼續向下執行listener.start()print('執行下面代碼')print(123)# 此外我們也可以不通過讓事件返回False,結束監聽# 而是就讓它一直監聽,等我們的邏輯執行完畢之后,手動結束監聽# 結束監聽是通listener.stop()import timetime.sleep(3) # 這里睡3s,相當于執行一段長邏輯了,否則子線程還未啟動,就直接被主線程強制stop掉了# 結束監聽listener.stop()print('程序結束')'''執行下面代碼123鼠標移動到: (850, 525)鼠標Button.left鍵在(850, 525)處按下鼠標Button.left鍵在(850, 525)處松開鼠標Button.right鍵在(850, 525)處按下鼠標Button.right鍵在(850, 525)處松開程序結束'''鍵盤

操作鍵盤也比較簡單,無非也是按下某個鍵、松開某個鍵,或者在按下某個鍵(或者多個)不松開的前提下、按下另一個鍵,下面來操作一下。方法和操作鼠標比較類似:

from pynput.keyboard import Key, Controller# 實例化一個可以操作鍵盤的對象keyboard = Controller()# 按下a鍵,小寫keyboard.press('a')# 松開a鍵keyboard.release('a')# 按下A鍵,大寫keyboard.press('A')# 松開A鍵keyboard.release('A')'''像英文字符、數字等等直接輸入相應的字符即可但如果是shift、ctrl等鍵,那么需要調用Key里面屬性'''# 按下大寫鍵keyboard.press(Key.caps_lock)# 松開大寫鍵keyboard.release(Key.caps_lock)

下面來看看如何在按住某個鍵不放的前提下,按下另外的鍵

from pynput.keyboard import Key, Controller# 實例化一個可以操作鍵盤的對象keyboard = Controller()# 注意調用的方法,是pressed,不是press# shift有兩個鍵,一個是左邊的、一個是右邊的with keyboard.pressed(Key.shift_l): keyboard.press('1') keyboard.release('1')'''上面的結果會輸出一個感嘆號,另外我們鍵盤的上方有數字鍵、右側也有數字鍵。我們平時輸出感嘆號用的都是shift加上鍵盤上方的數字鍵,用右側的數字鍵會沒有效果但是對于pynput則沒有區別,都會輸出感嘆號,因為你用鍵盤上方和有方的數字鍵打出來的都是數字'''# 如果要同時按下多個鍵呢?那就輸入多個鍵即可,細心的老鐵可能發現了,這正是pycharm啟動程序的快捷鍵with keyboard.pressed(Key.shift_l, Key.ctrl_l): keyboard.press(Key.f10)監控

監控鍵盤使用的方法和監控鼠標非常類似,依舊是實例化一個類Listener

from pynput.keyboard import Key, Listener# 此時的Listener是從keyboard里面導入的def on_press(key): # 當按下esc,結束監聽 if key == Key.esc: print(f'你按下了esc,監聽結束') return False print(f'你按下了{key}鍵')def on_release(key): print(f'你松開了{key}鍵')with Listener(on_press=on_press, on_release=on_release) as listener: listener.join()'''你按下了’a’鍵你松開了’a’鍵你按下了Key.shift鍵你松開了Key.shift鍵你按下了Key.right鍵你松開了Key.right鍵你按下了Key.down鍵你松開了Key.down鍵你按下了esc,監聽結束'''

所以定義函數的方式和操作鼠標也是類似的,該Listener同樣會開啟一個線程。另外這里的key打印的是’Key.xxx’,我們轉成字符串其實已經可以判斷按下了哪個鍵了。不過key里面還是提供了方法,讓我們獲取操作的鍵

from pynput.keyboard import Key, Listenerdef on_press(key): ''' 我們之前說按下某個鍵的時候,如果是英文字符、數字這些,直接輸入相應的字符即可 但如果是ctrl、shift這些鍵,需要從keyboard.Key里面獲取 那么同理,在這里我們如果想要獲取具體按下、松開哪個鍵的話,那么可以調用key.char或者key.name 如果是英文字符、數字這些,調用key.char;如果是ctrl、shift、f1、f12這些鍵,則需要調用key.name ''' if key == Key.esc: print(f'你按下了esc,監聽結束') return False print(f'你按下了{key.char if hasattr(key, ’char’) else key.name}鍵')def on_release(key): print(f'你松開了{key.char if hasattr(key, ’char’) else key.name}鍵')with Listener(on_press=on_press, on_release=on_release) as listener: listener.join()'''你按下了shift鍵你松開了shift鍵你按下了a鍵你松開了a鍵你按下了esc,監聽結束'''

此時返回的就是普通的鍵的名稱,沒有Key.這個前綴了。以上就是這個模塊的內容了,具體怎么使用可以由你自己決定。另外這個模塊在Linux上也是可以運行的,但前提是必須有顯示器,而公司用的服務器肯定是不帶顯示器的,所以不推薦Linux上使用

以上就是python使用pynput庫操作、監控你的鼠標和鍵盤的詳細內容,更多關于python pynput庫操作監控鼠標鍵盤的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲国产综合在线看不卡| 欧美日韩精品免费观看视完整| 福利一区在线| 在线手机中文字幕| 亚洲乱亚洲高清| 中文字幕一区二区三区四区久久| 亚洲精品欧美| 久久美女精品| 久久精品99久久久| 美女精品视频在线| 中文字幕日本一区二区| 自拍自偷一区二区三区| 日韩高清中文字幕一区二区| 91精品久久久久久久久久不卡| 日韩中文字幕区一区有砖一区 | 中文字幕免费一区二区| 久久精品国产99国产| 欧美激情在线精品一区二区三区| 亚洲网址在线观看| 日韩中文字幕无砖| 精品久久电影| 亚洲免费成人| 国产精品嫩草影院在线看| 激情黄产视频在线免费观看| 久久不见久久见国语| 喷白浆一区二区| 国产精品亚洲片在线播放| 亚洲精选久久| 你懂的国产精品| 黄色亚洲精品| 美腿丝袜在线亚洲一区| 亚洲免费观看| 图片区亚洲欧美小说区| 丁香婷婷久久| 国产在线日韩| 亚洲成人国产| 美女av在线免费看| 日韩高清不卡一区二区| 里番精品3d一二三区| 国产欧美高清视频在线| 日韩成人三级| 午夜欧美巨大性欧美巨大| 美女视频黄免费的久久| 国产精品亚洲综合久久| 日韩国产欧美一区二区三区| 国产精品成人a在线观看| 综合激情网...| 日韩**一区毛片| 黑人精品一区| 日本欧美一区二区在线观看| 91精品国产一区二区在线观看| 精精国产xxxx视频在线播放| 国产精品视频一区二区三区| 国产精品美女久久久| 欧美日韩国产一区精品一区| 国产精品mv在线观看| 国产精品嫩模av在线| 欧美日本不卡| 国产精品亚洲一区二区在线观看| 国产探花在线精品| 欧美天堂在线| 日韩视频一区| 久久国产毛片| 久久一区国产| 高清av不卡| 99久久夜色精品国产亚洲1000部| 国产亚洲一区| 日韩高清国产一区在线| 日韩精品一二三区| 亚洲bt欧美bt精品777| 婷婷五月色综合香五月| 亚洲成人二区| 国产精品专区免费| 国产二区精品| 一区久久精品| 婷婷视频一区二区三区| 日韩av午夜在线观看| 亚洲国产一区二区三区在线播放| 亚洲综合日本| 日本欧美韩国一区三区| 麻豆国产精品一区二区三区| 亚洲精品成人一区| 一区二区电影| 美女尤物久久精品| 国产精品手机在线播放| 综合色一区二区| 国产在线一区不卡| 国产精品宾馆| 国产精品久久久久久久久免费高清| 在线一区av| 国产在线一区不卡| 中文视频一区| 老鸭窝亚洲一区二区三区| 国产麻豆一区二区三区精品视频| 亚洲香蕉视频| 欧美亚洲自偷自偷| 国产精品久久免费视频| 亚洲精品成人| 99视频精品| 伊人www22综合色| 日韩1区2区日韩1区2区| 精品亚洲美女网站| 欧美成人a交片免费看| 久久久国产精品一区二区中文| 偷拍亚洲精品| 久久久久久久欧美精品| 日韩精品专区| 日韩精品三级| 亚洲精品乱码日韩| 国产欧美视频在线| 岛国精品一区| 日本不卡一区二区| 日韩深夜视频| 蜜桃视频在线网站| 女人天堂亚洲aⅴ在线观看| 国产精品主播| 久久精品国产99国产| 亚洲天堂1区| 欧美专区18| 日韩精品免费视频一区二区三区| 久久国产欧美日韩精品| 亚洲激情国产| 国产亚洲一区| 国产精品白丝av嫩草影院| 日韩成人精品一区| 亚洲精品午夜av福利久久蜜桃| 麻豆一区二区三| 亚洲一区资源| 国产一区二区三区网| 91综合久久爱com| 日韩欧美一区二区三区免费观看| 日本精品另类| 精品不卡一区| 欧美aa在线视频| 婷婷成人av| 久久精品理论片| 麻豆成人91精品二区三区| 国产美女高潮在线观看| 国产极品久久久久久久久波多结野| 欧美日韩视频| 88xx成人免费观看视频库| 欧美在线亚洲| 国产精品一区二区三区美女| 久久影院午夜精品| 亚洲aa在线| 欧美丝袜一区| 你懂的网址国产 欧美| 国产日韩在线观看视频| 毛片在线网站| 亚洲视频电影在线| 日韩免费在线| 日本亚洲最大的色成网站www | 欧美a在线观看| 欧美专区一区二区三区| 91精品一区国产高清在线gif| 亚洲欧美日韩国产一区| 精品国产乱码久久久| 亚洲精品在线二区| 91精品视频一区二区| 午夜精品福利影院| 热久久久久久久| 国产精选在线| 天堂√8在线中文| 亚洲精品九九| 欧美三级第一页| 色在线中文字幕| 99久久激情| 国产精品啊v在线| 麻豆91精品91久久久的内涵| 久久久精品区| 精品美女视频 | 日韩视频不卡| 视频一区在线播放| 久久福利一区| 久久久成人网| 亚洲欧美日韩专区| 日韩成人免费| 国产精品极品在线观看| 亚洲精品成a人ⅴ香蕉片| 合欧美一区二区三区| 美女av在线免费看| 久久精品福利| 日韩精品专区| 999国产精品| 麻豆精品蜜桃视频网站| 日韩美女一区二区三区在线观看| 国产欧美一级| 日韩国产欧美三级| 亚洲精选91| 国产videos久久| 国产精品久久久久久模特| 欧美日韩精品一区二区三区在线观看| 只有精品亚洲| 模特精品在线| 免费不卡在线观看| 蜜臀av在线播放一区二区三区 | 婷婷综合激情| 欧美日韩精品一区二区视频| 水蜜桃精品av一区二区| 精品深夜福利视频|