Python——pyHook监听鼠标键盘事件

摘要:
pyHook包为Windows中的全局鼠标和键盘事件提供回调。底层C库报告的信息包括事件发生的时间、事件发生的窗口的名称、事件的值以及任何键盘修饰符。正常操作需要python com等操作系统的API支持。pyHook和python com安装的第一个链接。然后我们将讨论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()

结果如下:

Python——pyHook监听鼠标键盘事件第1张

但是,

其实我们都明白,

一个程序是不可能只有这一段代码的,
这最多只能算是一个线程。

那么,我们来把主函数改一下吧:

import _thread

if __name__ == "__main__":
    try:
        _thread.start_new_thread(main, ())
    except:
        print("Error")

    while 1:
        pass

这就变成了线程,输出结果依旧,但似乎卡了许多???而且很明显的是,监控鼠标&键盘事件很容易影响我们系统的正常运行,也就是容易卡顿,甚至会造成输出不全或者是按键失灵等问题。
这就不好玩了。
毕竟我也只是想监测鼠标有没有动而已。
所以最简单的办法就是——

把你不需要的功能输出统统删掉,就不卡了。

至于这东西有什么用呢~~~

那就厉害咯。

你可以记录并画出自己的鼠标轨迹;或者是记录一天各按键的次数,并进行排序;当然,如果你比较皮,你还可以锁住别人的鼠标键盘(只需返回值为None);甚至是记录下别人一天在哪些程序花费了多少时间,看什么网页啊,八小时上班七小时水群啊,毕竟你是可以获取当前窗口标题的(WindowName)。
嘘~~~

免责声明:文章转载自《Python——pyHook监听鼠标键盘事件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇配置github SSH公钥登录阿里巴巴开源技术汇总:115个软件(四)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS兼容性问题(FF与IE)

不同浏览器中js兼容问题大全 1.document.formName.item('itemName')问题 说明: 1 //IE下(两种) 2 document.formName.item("itemName"); 3 document.formName.elements ["elementName"]; 4 //Firefox下 5 document.f...

python 字符串 转 bit, bitarray 异或加密

Python中异或加密要将str 转为 bitarray, 提示: int类型和纯数字的字符串也可以异或处理, 可能更方便 from bitarray import bitarray def str2bitarray(msg):  # msg 为str   msg_2 = ""  # 转为1010拼接成字符串   for a in msg.encode(...

embOS实时操作系统 任务通讯

1. 轮询全局变量 2. 使用事件驱动 A. 信号量 (1) 二进制信号量(resource/binary semaphore)< 互斥锁 Mutex( Mutual exclusion ) > 信号量只有二进制的0或1 OS_Use() Claims a resource and blocks it for other tasks OS_Un...

转载:pyqt线程间通过 信号/槽 通信

转自:http://blog.sina.com.cn/s/blog_613d5bb701016qzv.html 信号(singal)与槽(slot)用于对象相互通信,信号:当某个对象的某个事件发生时,触发一个信号,槽:响应指定信号的所做的反应,其实信号槽类似于.NET里面的委托、事件,比如Repeater控件类,当行数据绑定后,触发一个ItemDataBo...

python线程互斥锁Lock(29)

在前一篇文章python线程创建和传参中我们介绍了关于python线程的一些简单函数使用和线程的参数传递,使用多线程可以同时执行多个任务,提高开发效率,但是在实际开发中往往我们会碰到线程同步问题,假如有这样一个场景:对全局变量累加1000000次,为了提高效率,我们可以使用多线程完成,示例代码如下: #!usr/bin/env python#-*- cod...

python【第五篇】常用模块学习

1.模块 a.定义:本质就是.py结尾的python文件,逻辑上组织python代码,实现某种功能。例:文件名test.py-->模块名test。 b.导入方法:imort moduname                 from mdname import *                 from mdname import name as...