PyHook


PyHook是一個基於Python的“鈎子”庫,主要用於監聽當前電腦上鼠標和鍵盤的事件。這個庫依賴於另一個Python庫PyWin32,PyWin32只能運行在Windows平台,所以PyHook也只能運行在Windows平台。下面主要學習了以下幾點:
  • 如何設置鼠標和鍵盤的“鈎子”
  • 事件信息
  • 如何傳遞和屏蔽事件
pythoncom 任何應用程序想得到鼠標和鍵盤的輸入事件通知,都必須有一個Windows的消息通道。最簡單的方法是使用在Win32擴展的Python包pythoncom 的PumpMessages方法。
    import pythoncom 
    pythoncom.PumpMessages()
Mouse Hooks 要接收鼠標事件,你必須創建一個HookManager對象,並提供它會為您感興趣的事件的回調。例如,你可以選擇接收只有左邊的按鈕按下事件,鼠標移動事件,或所有鼠標事件,僅舉幾例。每個事件類型可以被定向到一個且只有一個回調函數。
import pythoncom, pyHook 

def OnMouseEvent(event):
    # called when mouse events are received
    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

# create a hook manager
hm = pyHook.HookManager()
# watch for all mouse events
hm.MouseAll = OnMouseEvent
# set the hook
hm.HookMouse()
# wait forever
pythoncom.PumpMessages()
Keyboard Hooks 鍵盤“鈎子”的運行方式和鼠標的相似,只是返回的信息不同。
import pythoncom, pyHook 
 
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
 
# create a hook manager
hm = pyHook.HookManager()
# watch for all mouse events
hm.KeyDown = OnKeyboardEvent
# set the hook
hm.HookKeyboard()
# wait forever
pythoncom.PumpMessages()
Event Filtering 鍵盤和鼠標事件的回調可以決定是否允許事件訊息傳遞給他們的窗口。如果一個回調函數返回True,允許消息傳遞給其他應用程序,然后到它的目的地已注冊的回調。如果函數返回FALSE,消息被封鎖。
import pythoncom, pyHook 
 
def OnKeyboardEvent(event):
  # block only the letter A, lower and uppercase
  return (event.Ascii not in (ord('a'), ord('A')))
 
# create a hook manager
hm = pyHook.HookManager()
# watch for all mouse events
hm.KeyDown = OnKeyboardEvent
# set the hook
hm.HookKeyboard()
# wait forever
pythoncom.PumpMessages()


免責聲明!

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



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