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)。

  嘘~~~

最新文章

  1. 论文 查重 知网 万方 paperpass
  2. VSFTP安装
  3. Big Event in HDU
  4. 封装WCF客户端调用
  5. Struts2中配置默认Action
  6. Codeforces Round #382 (Div. 2) C. Tennis Championship 斐波那契
  7. java泛型的使用
  8. FZU Problem 2136 取糖果
  9. PHP-用ThinkPHP和Bootstrap实现用户登录设计
  10. 使MySQL 支持繁体字
  11. c++sort函数的用法浅析
  12. 关于java IO 过程当中同时读写的问题
  13. MYSQL中delete删除多表数据与删除关联数据
  14. 简单的字符串比较题 POJ 1936
  15. 如何利用keytool查看一个apk的签名
  16. Entity Framework Core 生成跟踪列
  17. C++学习笔记第三天:类、虚函数、双冒号
  18. 解读Raft(一 算法基础)
  19. Quartz公共类,log4net 日志分目录 ,调度任务。
  20. python 奇偶拆分list,python拆分list,得到一个原来list的奇数list,一个原来list的偶数list

热门文章

  1. mysql 架构篇系列 1 复制原理和复制架构
  2. mysql 开发基础系列7 流程函数与其它函数
  3. C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解
  4. 您的快递(高并发服务器之poll和epoll)请签收
  5. 自动生成实体类和xml
  6. AWT/Swing——事件处理
  7. sql server 获取自增列下一个值或者获取指定表的主键值
  8. IdentityServer4 中文文档 -11- (快速入门)添加基于 OpenID Connect 的用户认证
  9. for循环知识点总结(一)
  10. c# 怎么读取web.config中的配置项