zoukankan      html  css  js  c++  java
  • 用python的库监听鼠标程序测试,有程序,有现象

    程序如下:

    # -*- 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()

    //////////////////////////////////////////////////////////////

    移动鼠标时如下图:

    点击鼠标左键时见下图:

    点击鼠标右键时见下图:

    滚动鼠标轮时见下图:

    /////////////////////////////////////////////////////

    附赠一个更加有趣的小例子

    # -*- coding: utf-8 -*-
    """
    Created on Sun Jul 23 19:36:50 2017

    @author: Administrator
    """

    import pythoncom, pyHook
    import win32gui,win32api
    import win32con
    import pymouse
    import time
    import sys
    from lianbiao1 import SingleLinkedList
    from lianbiao1 import Node  

    m=pymouse.PyMouse()   #这句话的作用是用来产生鼠标事件的
    K_press = False          #这是程序的软开关,用于编程开始和结束,按下F2变True,按下F4变False


     
    def OnKeyboardEvent(event):
      global K_press #在函数里面使用全局变量的时候要加上global关键字


      win32api.keybd_event(16,0,win32con.KEYEVENTF_KEYUP,0) #释放shift ,因为当你进入到#时,就少释放了一次shif
                                                            #所以,进来之后先释放一次shif.
      #监听到任何按键,这里是转换输入法,我们是 '#' 或 '空格' 或 '回车' 或 '鼠标点击' 去转换.

          
      #编写开始编程按键处理
      if str(event.Key)=='F2': #按下F2
        K_press=True
      if str(event.Key)=='F4': #按下F4
        K_press=False
      if str(event.Key)=='F7': #按下F7后终止
        win32api.PostQuitMessage()
        sys.exit(0)
     
      if str(event.Key)=='3'and K_press==True: #按下F2,即处于编程开始阶段
        #先进行中英文切换
        win32api.keybd_event(16,0,0,0)  #shift键位码是16
        win32api.keybd_event(16,0,win32con.KEYEVENTF_KEYUP,0)
        #键入#
        win32api.keybd_event(16,0,0,0)  #shift键位码是16
        time.sleep(0.3)
        #win32api.keybd_event(99,0,0,0)  #3键位码是99
        #win32api.keybd_event(99,0,win32con.KEYEVENTF_KEYUP,0) #释放按键3
        #win32api.keybd_event(16,0,win32con.KEYEVENTF_KEYUP,0) #释放shift
        #删除3
        #win32api.keybd_event(8,0,0,0)  #删除键位码是8
        #win32api.keybd_event(8,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
        #切换中英文
        #win32api.keybd_event(16,0,0,0)  #shift键位码是16
        #win32api.keybd_event(16,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
        #m.click(300,300,2,1)
        #time.sleep(1)
     # win32api.keybd_event(16,0,win32con.KEYEVENTF_KEYUP,0) #释放按键shift
        #m.click(400,400)
    #  if str(event.Key)=='Space'and K_press==True: #按下空格,并且处于编程开始阶段
        #先进行中英文切换
    #    win32api.keybd_event(16,0,0,0)  #shift键位码是16
    #    win32api.keybd_event(16,0,win32con.KEYEVENTF_KEYUP,0)
        #会有空格补位??    
    #  if str(event.Key)=='Return'and K_press==True: #按下回车,并且处于编程开始阶段
        #先进行中英文切换
    #    win32api.keybd_event(16,0,0,0)  #shift键位码是16
    #    win32api.keybd_event(16,0,win32con.KEYEVENTF_KEYUP,0)
        #会有空格补位??  

        
      return True
     



    def onMouseEvent(event):   #鼠标的事件
        if str(event.Message)=='513' and K_press==True: #按下F2,即处于编程开始阶段   如果检测到点击了鼠标的左键
           m.click(500, 300, 2)                    #点击鼠标右键
           m.move(200,200)                      #把鼠标移动到200,200的位置
           
           
           
        return True
        
        
        
        

    if __name__ == "__main__":  #相当于主函数

      #创建hook句柄
      hm = pyHook.HookManager() #创建一个钩子管理对象
     

      #监控键盘
      hm.KeyDown = OnKeyboardEvent #至于如何循环检测,那就不太清楚了,或许是库. #就好像设置了中断一样.                           
      hm.HookKeyboard()            #键盘钩子
     
     
      #监控鼠标
      hm.MouseAll = onMouseEvent  #鼠标事件
      hm.HookMouse()              #鼠标钩子
     

      pythoncom.PumpMessages()
     

  • 相关阅读:
    74.Interesting Sequence(有趣的数列)(拓扑排序)
    CODEVS 1746 贪吃的九头龙
    NYOJ 110 剑客决斗
    CODEVS 2451 互不侵犯
    洛谷 P1896 互不侵犯King
    洛谷 P1066 2^k进制数
    洛谷 P1656 炸铁路
    洛谷 P1830 轰炸Ⅲ
    CODEVS 1051 接龙游戏
    POJ 3461 Oulipo
  • 原文地址:https://www.cnblogs.com/chulin/p/8884791.html
Copyright © 2011-2022 走看看