zoukankan      html  css  js  c++  java
  • 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)。
      嘘~~~

  • 相关阅读:
    如何让touchmove之后不触发touchend的事件
    解决alert在ios版微信中显示url的问题(重写alert)
    meta常用标签总结
    HTTP状态码
    前端用到的一些功能
    判断鼠标从哪个方向进入--jQuery
    jsonp是什么
    数据结构与算法之链表-javascript实现
    数据结构之栈-JavaScript实现栈的功能
    数据结构之列表-javascript实现
  • 原文地址:https://www.cnblogs.com/WoLykos/p/10477791.html
Copyright © 2011-2022 走看看