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)。
噓~~~