Python——pyHook監聽鼠標鍵盤事件


pyHook包為Windows中的全局鼠標和鍵盤事件提供回調。
底層C庫報告的信息包括事件的時間,事件發生的窗口名稱,事件的值,任何鍵盤修飾符等。
而正常工作需要pythoncom等操作系統的API的支持。
  

先鏈上一篇《pyHook和pythoncom的安裝》

  

然后開始講pyHook的使用。

關於pyHook的使用,網上現存的大多教程如下:

import pythoncom
import pyHook


def onMouseEvent(event):
    # 監聽鼠標事件
    print("MessageName:", event.MessageName)
    print("Message:", event.Message)
    print("Time:", event.Time)
    print("Window:", event.Window)
    print("WindowName:", event.WindowName)
    print("Position:", event.Position)
    print("Wheel:", event.Wheel)
    print("Injected:", event.Injected)
    print("---")

    # 返回 True 以便將事件傳給其它處理程序
    # 注意,這兒如果返回 False ,則鼠標事件將被全部攔截
    # 也就是說你的鼠標看起來會僵在那兒,似乎失去響應了
    return True


def onKeyboardEvent(event):
    # 監聽鍵盤事件
    print("MessageName:", event.MessageName)
    print("Message:", event.Message)
    print("Time:", event.Time)
    print("Window:", event.Window)
    print("WindowName:", event.WindowName)
    print("Ascii:", event.Ascii, chr(event.Ascii))
    print("Key:", event.Key)
    print("KeyID:", event.KeyID)
    print("ScanCode:", event.ScanCode)
    print("Extended:", event.Extended)
    print("Injected:", event.Injected)
    print("Alt", event.Alt)
    print("Transition", event.Transition)
    print("---")
    # 同鼠標事件監聽函數的返回值
    return True


def main():
    # 創建一個“鈎子”管理對象
    hm = pyHook.HookManager()
    # 監聽所有鍵盤事件
    hm.KeyDown = onKeyboardEvent
    # 設置鍵盤“鈎子”
    hm.HookKeyboard()
    # 監聽所有鼠標事件
    hm.MouseAll = onMouseEvent
    # 設置鼠標“鈎子”
    hm.HookMouse()
    # 進入循環,如不手動關閉,程序將一直處於監聽狀態
    pythoncom.PumpMessages()


if __name__ == "__main__":
    main()

結果如下:


  

但是,

其實我們都明白,

一個程序是不可能只有這一段代碼的,
這最多只能算是一個線程。

  
那么,我們來把主函數改一下吧:

import _thread

if __name__ == "__main__":
    try:
        _thread.start_new_thread(main, ())
    except:
        print("Error")

    while 1:
        pass

這就變成了線程,輸出結果依舊,但似乎卡了許多???而且很明顯的是,監控鼠標&鍵盤事件很容易影響我們系統的正常運行,也就是容易卡頓,甚至會造成輸出不全或者是按鍵失靈等問題。
  
這就不好玩了。
畢竟我也只是想監測鼠標有沒有動而已。
所以最簡單的辦法就是——

把你不需要的功能輸出統統刪掉,就不卡了。

  

至於這東西有什么用呢~~~

那就厲害咯。

  你可以記錄並畫出自己的鼠標軌跡;或者是記錄一天各按鍵的次數,並進行排序;當然,如果你比較皮,你還可以鎖住別人的鼠標鍵盤(只需返回值為None);甚至是記錄下別人一天在哪些程序花費了多少時間,看什么網頁啊,八小時上班七小時水群啊,畢竟你是可以獲取當前窗口標題的(WindowName)。
  噓~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM