中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在python中使用pynput庫對鼠標、鍵盤進行監控

發布時間:2021-03-10 13:51:11 來源:億速云 閱讀:396 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關怎么在python中使用pynput庫對鼠標、鍵盤進行監控,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

python是什么意思

Python是一種跨平臺的、具有解釋性、編譯性、互動性和面向對象的腳本語言,其最初的設計是用于編寫自動化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開發獨立的項目和大型項目。

鼠標

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 Controller

mouse = Controller()

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

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

怎么在python中使用pynput庫對鼠標、鍵盤進行監控

點擊一次就會移動一個step

怎么在python中使用pynput庫對鼠標、鍵盤進行監控

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

from pynput.mouse import Controller

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

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

監控鼠標

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

from pynput.mouse import Listener


def 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, Button


def 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 Listener


def 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 time
time.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, Listener

def 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,監聽結束
"""

關于怎么在python中使用pynput庫對鼠標、鍵盤進行監控就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

文成县| 绍兴市| 社会| 永福县| 沾益县| 平阳县| 常熟市| 凤山市| 青海省| 图木舒克市| 江华| 千阳县| 丘北县| 寿光市| 纳雍县| 怀宁县| 东乡县| 江阴市| 乌什县| 饶平县| 虎林市| 梁河县| 呼和浩特市| 清镇市| 盘锦市| 射洪县| 册亨县| 博湖县| 皋兰县| 沁源县| 开原市| 安溪县| 响水县| 丹江口市| 蒙阴县| 蓬莱市| 嘉善县| 海伦市| 肃宁县| 赞皇县| 昭通市|