婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python使用pynput庫操作、監(jiān)控你的鼠標和鍵盤

python使用pynput庫操作、監(jiān)控你的鼠標和鍵盤

熱門標簽:北京外呼電銷機器人招商 南京crm外呼系統(tǒng)排名 賓館能在百度地圖標注嗎 400電話 申請 條件 汕頭電商外呼系統(tǒng)供應(yīng)商 crm電銷機器人 云南地圖標注 電銷機器人 金倫通信 鄭州智能外呼系統(tǒng)中心

楔子

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

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

鼠標

操作鼠標

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

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)
# 上面兩行連在一起等于一次單擊。如果上面兩行緊接著再重復(fù)一次,那么整體會實現(xiàn)雙擊的效果
# 因為兩次單擊是連續(xù)執(zhí)行的,沒有等待時間。如果中間來一個time.sleep幾秒,那么就變成兩次單擊了


# 當然鼠標點擊我們有更合適的辦法,使用click函數(shù)
# 該函數(shù)接收兩個參數(shù):點擊鼠標的哪個鍵、以及點擊次數(shù)
# 這里連續(xù)點擊兩次,等于雙擊
mouse.click(Button.right, 2)

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

這種情況我們?nèi)绻胫栏鄡?nèi)容,需要向下滑動,也就是沿著y軸滑動

from pynput.mouse import Controller

mouse = Controller()

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

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

點擊一次就會移動一個step

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

from pynput.mouse import Controller

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

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

監(jiān)控鼠標

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

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(
 # 上面函數(shù)名不能變,記得對應(yīng)
 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。所以我們調(diào)用listener.join()相當于就阻塞在這里了,會一直監(jiān)控鼠標事件。所以我們需要一個機制來讓它停下來:

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("點擊右鍵,停止監(jiān)控")
  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)處松開
點擊右鍵,停止監(jiān)控
"""

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

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)

# 啟動線程,主線程會繼續(xù)向下執(zhí)行
listener.start()
print("執(zhí)行下面代碼")
print(123)

# 此外我們也可以不通過讓事件返回False,結(jié)束監(jiān)聽
# 而是就讓它一直監(jiān)聽,等我們的邏輯執(zhí)行完畢之后,手動結(jié)束監(jiān)聽
# 結(jié)束監(jiān)聽是通listener.stop()
import time
time.sleep(3) # 這里睡3s,相當于執(zhí)行一段長邏輯了,否則子線程還未啟動,就直接被主線程強制stop掉了
# 結(jié)束監(jiān)聽
listener.stop()
print("程序結(jié)束")
"""
執(zhí)行下面代碼
123
鼠標移動到: (850, 525)
鼠標Button.left鍵在(850, 525)處按下
鼠標Button.left鍵在(850, 525)處松開
鼠標Button.right鍵在(850, 525)處按下
鼠標Button.right鍵在(850, 525)處松開
程序結(jié)束
"""

鍵盤

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

from pynput.keyboard import Key, Controller

# 實例化一個可以操作鍵盤的對象
keyboard = Controller()

# 按下a鍵,小寫
keyboard.press("a")
# 松開a鍵
keyboard.release("a")

# 按下A鍵,大寫
keyboard.press("A")
# 松開A鍵
keyboard.release("A")
"""
像英文字符、數(shù)字等等直接輸入相應(yīng)的字符即可
但如果是shift、ctrl等鍵,那么需要調(diào)用Key里面屬性
"""
# 按下大寫鍵
keyboard.press(Key.caps_lock)
# 松開大寫鍵
keyboard.release(Key.caps_lock)

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

from pynput.keyboard import Key, Controller

# 實例化一個可以操作鍵盤的對象
keyboard = Controller()

# 注意調(diào)用的方法,是pressed,不是press
# shift有兩個鍵,一個是左邊的、一個是右邊的
with keyboard.pressed(Key.shift_l):
 keyboard.press("1")
 keyboard.release("1")
"""
上面的結(jié)果會輸出一個感嘆號,另外我們鍵盤的上方有數(shù)字鍵、右側(cè)也有數(shù)字鍵。
我們平時輸出感嘆號用的都是shift加上鍵盤上方的數(shù)字鍵,用右側(cè)的數(shù)字鍵會沒有效果

但是對于pynput則沒有區(qū)別,都會輸出感嘆號,因為你用鍵盤上方和有方的數(shù)字鍵打出來的都是數(shù)字
"""
# 如果要同時按下多個鍵呢?那就輸入多個鍵即可,細心的老鐵可能發(fā)現(xiàn)了,這正是pycharm啟動程序的快捷鍵
with keyboard.pressed(Key.shift_l, Key.ctrl_l):
 keyboard.press(Key.f10)

監(jiān)控

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

from pynput.keyboard import Key, Listener


# 此時的Listener是從keyboard里面導(dǎo)入的

def on_press(key):
 # 當按下esc,結(jié)束監(jiān)聽
 if key == Key.esc:
  print(f"你按下了esc,監(jiān)聽結(jié)束")
  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,監(jiān)聽結(jié)束
"""

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

from pynput.keyboard import Key, Listener

def on_press(key):
 """
 我們之前說按下某個鍵的時候,如果是英文字符、數(shù)字這些,直接輸入相應(yīng)的字符即可
 但如果是ctrl、shift這些鍵,需要從keyboard.Key里面獲取

 那么同理,在這里我們?nèi)绻胍@取具體按下、松開哪個鍵的話,那么可以調(diào)用key.char或者key.name
 如果是英文字符、數(shù)字這些,調(diào)用key.char;如果是ctrl、shift、f1、f12這些鍵,則需要調(diào)用key.name
 """
 if key == Key.esc:
  print(f"你按下了esc,監(jiān)聽結(jié)束")
  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,監(jiān)聽結(jié)束
"""

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

以上就是python使用pynput庫操作、監(jiān)控你的鼠標和鍵盤的詳細內(nèi)容,更多關(guān)于python pynput庫操作監(jiān)控鼠標鍵盤的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 用Python監(jiān)控你的朋友都在瀏覽哪些網(wǎng)站?
  • python只需30行代碼就能記錄鍵盤的一舉一動
  • Python實時監(jiān)控網(wǎng)站瀏覽記錄實現(xiàn)過程詳解
  • python自動發(fā)微信監(jiān)控報警
  • 你知道怎么用Python監(jiān)控聊天記錄嗎

標簽:懷化 浙江 昆明 西寧 石家莊 文山 錫林郭勒盟 梅州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《python使用pynput庫操作、監(jiān)控你的鼠標和鍵盤》,本文關(guān)鍵詞  python,使用,pynput,庫,操作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python使用pynput庫操作、監(jiān)控你的鼠標和鍵盤》相關(guān)的同類信息!
  • 本頁收集關(guān)于python使用pynput庫操作、監(jiān)控你的鼠標和鍵盤的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产亚洲欧美中文| 色综合久久九月婷婷色综合| 国产精品自拍网站| 91麻豆swag| 精品少妇一区二区三区在线播放| 国产精品久久久久一区| 亚洲成av人影院在线观看网| 成人一区二区三区在线观看| 欧美一区二区在线免费播放| 亚洲精品亚洲人成人网| 激情都市一区二区| 欧美日韩成人激情| 国产精品久久看| 国内成人自拍视频| 91精品国产福利| 亚洲午夜久久久久久久久电影网| 国产91对白在线观看九色| 日韩一区二区精品在线观看| 亚洲一区日韩精品中文字幕| 北条麻妃国产九九精品视频| 久久综合色鬼综合色| 午夜精品影院在线观看| 欧美亚洲图片小说| 亚洲欧美视频在线观看| 成人av资源下载| 国产精品久久久一本精品| 国产在线精品免费| 欧美精品一区二区三区蜜桃视频| 日韩国产在线一| 欧美久久久久久蜜桃| 亚洲国产精品久久艾草纯爱| 色哟哟国产精品| 亚洲男同1069视频| 色婷婷精品大视频在线蜜桃视频| 中文字幕国产一区| 99re成人在线| 一区二区三区欧美在线观看| 91福利国产成人精品照片| 亚洲免费av网站| 欧美性三三影院| 秋霞国产午夜精品免费视频| 欧美一级视频精品观看| 久久爱另类一区二区小说| 久久这里只精品最新地址| 国产精品一区二区男女羞羞无遮挡| 久久精品水蜜桃av综合天堂| 丁香啪啪综合成人亚洲小说| 中文字幕第一区| 99精品久久免费看蜜臀剧情介绍| 亚洲精品国产一区二区三区四区在线 | 91影院在线观看| 亚洲乱码日产精品bd| 色素色在线综合| 亚洲国产aⅴ天堂久久| 欧美日韩电影在线| 狠狠色丁香婷综合久久| 国产精品对白交换视频| 欧美主播一区二区三区美女| 首页综合国产亚洲丝袜| 精品少妇一区二区三区在线视频| 国产不卡视频在线播放| 亚洲日本欧美天堂| 日韩欧美综合一区| www.亚洲在线| 免费成人美女在线观看| 中文字幕免费观看一区| 在线观看亚洲精品| 国产最新精品免费| 玉足女爽爽91| 欧美电影精品一区二区| 99精品国产视频| 美女mm1313爽爽久久久蜜臀| 国产精品不卡视频| 日韩精品专区在线影院重磅| 97se亚洲国产综合自在线观| 奇米色777欧美一区二区| 亚洲欧美另类在线| 精品国产乱码91久久久久久网站| 91丨国产丨九色丨pron| 精品一二三四在线| 亚洲精品免费在线| 久久综合九色综合97婷婷女人| 91视视频在线观看入口直接观看www| 老司机一区二区| 亚洲精品乱码久久久久| 久久精品欧美一区二区三区不卡 | 亚洲自拍与偷拍| 久久这里只有精品视频网| 欧美日韩免费观看一区二区三区| 国产精品一品视频| 青娱乐精品在线视频| 亚洲精品综合在线| 国产精品色呦呦| 精品久久久久久久久久久久久久久 | 亚洲福利视频一区| 国产偷v国产偷v亚洲高清| 欧美一区二区人人喊爽| 欧美亚洲动漫制服丝袜| 成人国产亚洲欧美成人综合网 | 亚洲成人激情社区| **网站欧美大片在线观看| 亚洲精品在线三区| 亚洲精品在线免费观看视频| 88在线观看91蜜桃国自产| 在线精品国精品国产尤物884a| 成人黄色在线视频| 国产精品538一区二区在线| 久久精品国产色蜜蜜麻豆| 青青草国产精品亚洲专区无| 天堂av在线一区| 午夜精品一区二区三区电影天堂| 亚洲一区二区欧美激情| 亚洲精品免费在线| 亚洲激情av在线| 一区二区三区四区不卡视频 | 日韩av中文字幕一区二区| 国产精品亚洲第一 | 天天综合天天做天天综合| 丝袜美腿亚洲一区二区图片| 国产成人亚洲综合色影视| 欧美国产成人精品| 久久综合九色欧美综合狠狠| 美女爽到高潮91| 久久久久久久久久久久电影| 91精品蜜臀在线一区尤物| 色爱区综合激月婷婷| 欧美无人高清视频在线观看| 欧美亚洲高清一区| 欧美日韩国产影片| 8x8x8国产精品| 欧美一激情一区二区三区| 久久你懂得1024| 久久五月婷婷丁香社区| 国产欧美一区二区精品忘忧草| 精品国产免费人成电影在线观看四季| 久久在线观看免费| 国产精品成人在线观看| 中文字幕亚洲电影| 亚洲电影你懂得| 天天综合日日夜夜精品| 蜜臀av性久久久久蜜臀av麻豆| 捆绑变态av一区二区三区| 国产ts人妖一区二区| 成人午夜精品在线| 欧美美女黄视频| 精品久久久久香蕉网| 久久久亚洲欧洲日产国码αv| 国产精品久久久久久久蜜臀| 亚洲色图制服诱惑| 日韩电影网1区2区| 国模一区二区三区白浆| 91免费版pro下载短视频| 麻豆精品久久久| 成人动漫一区二区| 欧美精品日韩一本| 精品国产一区二区三区四区四| 日韩一区日韩二区| 亚洲3atv精品一区二区三区| 国产成人亚洲综合a∨婷婷 | 亚洲乱码国产乱码精品精可以看| 日本aⅴ免费视频一区二区三区 | 久久成人免费电影| 丰满白嫩尤物一区二区| 欧美精品九九99久久| 日本一区二区动态图| 亚洲一本大道在线| 成人美女视频在线看| 欧美亚洲免费在线一区| 国产精品三级电影| 亚洲综合在线视频| 成人午夜大片免费观看| 日韩欧美成人午夜| 最好看的中文字幕久久| 国产精品羞羞答答xxdd| 在线中文字幕一区| 国产精品电影院| 蜜芽一区二区三区| 不卡的av在线| 国产日本欧洲亚洲| 日本视频一区二区| 欧美日韩精品一区二区天天拍小说 | 国产精品三级视频| 精品亚洲成a人| 在线观看日韩精品| 亚洲欧美日韩一区二区| 国内久久精品视频| 日韩亚洲欧美成人一区| 国产精品久久久久久久午夜片| 日本中文字幕一区二区视频| 欧美日韩一区二区三区四区| 中文字幕色av一区二区三区| 国产精品1区2区| 日韩精品一区二区三区中文不卡| 亚洲国产精品人人做人人爽| 欧美日韩亚洲综合一区| 亚洲综合网站在线观看| 日韩毛片一二三区| 在线观看91精品国产入口| 精品一区二区在线观看| 久久女同精品一区二区|