用Python捕捉和模擬滑鼠事件

這個假期玩了不少galgame,不過有些很老的遊戲沒有自動運行模式,點擊滑鼠又太傷按鍵了,於是想把滾動滑鼠滾輪映射為點擊滑鼠。 網上搜了一下,沒發現什麼現成的軟體,而按鍵精靈又太重量級了,於是考慮乾脆自己用Python寫個算了。 很幸運地找到《用Python監聽滑鼠和鍵盤事件》這篇文章,於是把PyHook和PyWin32都裝上了(建議下exe版,免得安裝時各種蛋疼)。

翻了翻教程,發現很簡單:

# -*- coding: utf-8 -*-    import pythoncom, 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 可將事件傳給其它處理程式,否則停止傳播事件      return True    # 創建鉤子管理對象  hm = pyHook.HookManager()  # 監聽所有滑鼠事件  hm.MouseAll = OnMouseEvent # 等效於hm.SubscribeMouseAll(OnMouseEvent)  # 開始監聽滑鼠事件  hm.HookMouse()  # 一直監聽,直到手動退出程式  pythoncom.PumpMessages()

這個例子程式捕捉了所有的滑鼠事件,實際上我只需要捕捉向下滾動滾輪的事件即可。翻了下文檔,對應的是MouseWheel,之後只要判斷event.Wheel是否為-1即可。 最後就是觸發滑鼠點擊了,這就需要用到win32api.mouse_event()了,發送一個按下滑鼠左鍵的事件,再發送彈起的事件,就完成一次單擊了。 最終程式碼如下:

# -*- coding: utf-8 -*-    import pythoncom  import pyHook  import time  import win32api  import win32con    def onMouseWheel(event):      if event.Wheel == -1:          win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)          time.sleep(0.05)          win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)      return True    hm = pyHook.HookManager()  hm.MouseWheel = onMouseWheel  hm.HookMouse()    pythoncom.PumpMessages()

Tags: