使用步骤:运行编写好的程序,ichat模块自动调用微信登录,在手机端微信确认登录,在手机端微信的文件传输助手中输入pic命令,随后便可得知谁在使用您的电脑以及使用您的电脑在做什么
此次测试程序的环境以及主要库:py3.6,ichat,smtplib
projetDetail:
需要导入的python库
# win系统截屏API接口import win32gui, win32ui, win32con, win32apifrom email.mime.multipart import MIMEMultipart# 构建邮件文本from email.mime.text import MIMEText# 构造邮件图片from email.mime.image import MIMEImage# 调用第三方邮件服务import smtplib# 用于画图import matplotlib.pyplot as plt# 用于调取摄像头import cv2# 用于与微信交互import itchat
使用ichat模块的装饰器来装饰接收命令的函数
# 第一参数表示接收文本类型消息,isGroupChat为false表示忽略群聊@itchat.msg_register(itchat.content.TEXT, isGroupChat=False)def text_reply(msg): print(msg['Text']) if msg['Text'] == 'pic': sendemail() # 发送文本信息给文件传输助手 itchat.send('主人,请您查收', toUserName='filehelper') # 发送屏幕截图到文件传输助手 itchat.send('您的电脑的当前界面截屏:', toUserName='filehelper') itchat.send_image('haha.jpg', toUserName='filehelper') # 发送电脑使用者照片到文件传输助手 itchat.send('您的电脑的当前使用者:', toUserName='filehelper') itchat.send_image('example.png', toUserName='filehelper') # 拓展:也可以自动给指定好友发送信息 # 这里输入你好友的微信名字或备注。 # room = itchat.search_friends(name=r'陈翀') # print(room) # userName = room[0]['UserName'] # itchat.send('你好', toUserName='userName')
封装屏幕截图函数
def window_capture(filename): hwnd = 0 # 窗口的编号,0号表示当前活跃窗口 # 根据窗口句柄获取窗口的设备上下文DC(Divice Context) hwndDC = win32gui.GetWindowDC(hwnd) # 根据窗口的DC获取mfcDC mfcDC = win32ui.CreateDCFromHandle(hwndDC) # mfcDC创建可兼容的DC saveDC = mfcDC.CreateCompatibleDC() # 创建bigmap准备保存图片 saveBitMap = win32ui.CreateBitmap() # 获取监控器信息 MoniterDev = win32api.EnumDisplayMonitors(None, None) w = MoniterDev[0][2][2] h = MoniterDev[0][2][3] # print w,h #图片大小 # 为bitmap开辟空间 saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) # 高度saveDC,将截图保存到saveBitmap中 saveDC.SelectObject(saveBitMap) # 截取从左上角(0,0)长宽为(w,h)的图片 saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY) saveBitMap.SaveBitmapFile(saveDC, filename)
封装用于发送邮件的函数
def sendemail(): # 以html格式构建邮件内容 send_str = '' send_str += '监控电脑使用者' # html中以标签添加图片,align和width可以调整对齐方式及图片的宽度 send_str += '' send_str += '调用接口截屏' send_str += '' send_str += '' # 画图并保存到本地 # pic_path = 'test.png' # plt.plot([1, 3, 2, 4], '--r') # plt.title('这是一个测试') # plt.savefig(pic_path) # 拍照并保存到本地 cap = cv2.VideoCapture(0) f, frame = cap.read() # 此刻拍照 cv2.imwrite("example.png", frame) # 将拍摄内容保存为png图片 cap.release() # 关闭调用的摄像头 pic_path = 'example.png' # 调用接口截屏并保存到本地 for i in range(10): window_capture("haha.jpg") pic_path2 = 'haha.jpg' # 构建message msg = MIMEMultipart() # 添加邮件内容 content = MIMEText(send_str, _subtype='html', _charset='utf8') msg.attach(content) # 构建并添加图像对象,使用者图片 img1 = MIMEImage(open(pic_path, 'rb').read(), _subtype='octet-stream') img1.add_header('Content-ID', 'image1') msg.attach(img1) # 屏幕截图 img2 = MIMEImage(open(pic_path2, 'rb').read(), _subtype='octet-stream') img2.add_header('Content-ID', 'image2') msg.attach(img2) # 邮件主题 msg['Subject'] = '监控电脑使用者' # 邮件收、发件人 user = "1754006474@qq.com" to_list = ["pythondjango@163.com"] msg['To'] = ';'.join(to_list) msg['From'] = user # 构建并添加附件对象 # 如果不想直接在邮件中展示图片,可以以附件形式添加 img = MIMEImage(open(pic_path, 'rb').read(), _subtype='octet-stream') img.add_header('Content-Disposition', 'attachment', filename=pic_path) msg.attach(img) # 密码(有些邮件服务商在三方登录时需要使用授权码而非密码,比如网易和QQ邮箱) passwd = "bsoerryvgjgrbghg" # 登录邮箱 server = smtplib.SMTP_SSL("smtp.qq.com", port=465) server.login(user, passwd) print('Login Successful!') # 发送邮件 server.sendmail(user, to_list, msg.as_string()) print('Send Successful')
随后仅限在当前模块调用ichat模块来登录微信并使用ichat模块的run方法来执行被chat模块的msg_register装饰器装饰的函数
if __name__ == '__main__': itchat.auto_login(hotReload=False) # hotReload = True, 热启动,保持在线,下次运行代码可自动登录 itchat.run()
运行程序后扫码登录
扫码登录后,在手机端微信向文件传输助手输入pic命令后程序执行命令拍摄到电脑使用者的照片以及电脑当前屏幕截屏并发送到当前微信手机端
随后向指定邮箱发送邮件
邮件中有程序调用摄像头拍到的当前电脑使用者的照片以及电脑截屏
|
|