微信实现秒回以及控制电脑

女朋友给你发微信,你能秒回吗?,尤其是在你敲代码敲到激情之时(emmmm,或者说杀的正爽时?),当然是 ———— 可以秒回的? ,才不屑于用图灵机器人什么的,我们程序员?自有办法,当然是python可以实现。

网上看了看,发现一个很有意思的库itchat
大致看了一下介绍,发现十分有用
踏破铁鞋无觅处
它既可以接收你的message指令,还可以用itchat.send(**, 'filehelper')发送你需要的内容了,我们可以将输入的命令让电脑执行,并接收命令返回的内容?,这不就解决问题了这简直就是一个宝库,我们可以实现很多有趣的功能?

实现控制电脑的cmd命令

os.popen(command)

command是你可以指定输入的指令
一般我们这样用

import os
command =  'help'
output = os.popen(command)
info = output.readlines()
a=[]
for line in info:
    a.append(line.strip('/r'))
b=''.join(a)
print(b)

command指令可以自己改,当然你也可以在for循环里面直接输出line,不过会一行一行输出,不利于微信后端的获取和系统执行的效率,所以我们变成str类型,运行结果和在cmd的结果肯定是一样的,但是是以文字方式显示出来?
在这里插入图片描述
用这个能干什么呢,简单点,我们可以用来实现电脑的定时关机或者重启,举个栗子:1小时后自动关机,输入shutdown -s -t 3600,其中-s是关机,-t是定时,3600是3600秒。 shutdown -r 是重启,往深了说,查看网络连接,端口协议等,也是轻而易举的(手动滑稽)

实时屏幕

这里用到了cv2库,首先说一下安装代码:pip install opencv-python要切记切记不是pip install cv2 ,我这里是3.6.5,也可能跟版本有关,安装是这样按,但是导入的时候我们用的是import cv2
原理是利用了cv2的屏幕捕捉,得到了电脑的实时屏幕,类似于截图的功能,说起来截图也可以使用win32,就是使用Windows自带的程序,但是一张图片就4M左右,执行效率虽然说是比比cv2要高一点,但是作为用户,其实不容易感受到差别,所以我选用了cv2,大致思路如下,详细代码在最后放出

import cv2
cap = cv2.VideoCapture(0)
ret, img = cap.read()
cv2.imwrite(filepath,img)
cap.release()

查看文件和传输文件

查看文件用cmd的dir命令就可以查看,但是稍微复杂了一点,有些不懂命令的就不能直接使用了,所以把两个放出来写了,另外发送文件用itchat.send_file(filepath,'filehelper')这里有个小建议,先把文件后缀名显示出来再用这个程序?

先说查看文件

def list_folders_files(path):
    list_folders = []
    list_files = []
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path):
            list_folders.append(file)
        else:
            list_files.append(file)
    return (list_folders, list_files)

使用这个函数就可以得到指定路径(path)下的所有文件夹和文件了

再说一下传输文件

newpath = path.encode("utf-8").decode("utf-8")
itchat.send_file(newpath,'filehelper')

为什么要写第一句话呢?因为编码问题(令人特别特别头大的问题,在我另一个项目字频统计中也遇到了,但未解决☹️)感兴趣的可以在这查看Unicode之痛,简单的来说就是中文文字变成计算机可以识别的文字需要的步骤,但是这样还不行☹️,发送普通的英文文件是可以的,只要路径中有中文就不行,试了很久不行之后我看了看官方文档,发现了中文文件无法上传的办法

中文文件名文件上传
Q: 为什么中文的文件没有办法上传?

A: 这是由于requests的编码问题导致的。若需要支持中文文件传输,fields.py (py3版本见这里)文件放入requests包的packages/urllib3下即可

提供链接
python2
python3

有的可能没有这个路径,建议用everything搜索一下fields.py这个文件然后再进行操作,注意:这一步如果未完成的话,程序中的传输文件可能会出问题

让你的电脑说话

这个可以搞恶作剧,非常有意思,假设你室友玩你电脑,电脑突然骂了他一句,这个就很有意思了??
在这里我用了win32,也就是Windows自带的程序
这个程序较为简单,给出代码

import win32com.client as win
speak = win.Dispatch("SAPI.SpVoice")
m='asfwagawgawg'
speak.Speak(m)

虽然声音有点怪怪的,但是起到效果了,可以试试让他说666,他会给你一个耿直的回复:六百六十六??

聊天

我居然忘了最关键的自动回复…
这个和之前的内容是分开的,之前的都属于filehelper的内容,现在是属于聊天内容,但这个我并没有做很多,朋友们可以自行添加啊,可以使用random.choice随机回复,她肯定察觉不出来?,或者可以更高级,做一个类似于人工智能的,识别的她的语句,然后回复相应的信息,这一点csdn的大佬很多,我这小白还不太会?,所以就没有那么深入去做这个
完整代码?

import itchat
import os
import time
import cv2
from PIL import ImageGrab
import win32com.client as win
speak = win.Dispatch("SAPI.SpVoice")

sendMsg = u"你好啊"  #可以自己多写几条,随机发送
usageMsg = u"使用方法:(切记以下所有命令中路径注意一定要用 / 而不用 \  ,其中冒号必须为英文状态下的 :)\n"\
           u"1.运行CMD命令:cmd xxx (xxx为命令)\n" \
           u"-例子:1小时后自动关机,输入shutdown -s -t 3600,其中-s是关机,-t是定时,3600是3600秒。 shutdown -r 是重启\n" \
           u"2.获取当前电脑用户:cap\n" \
           u"3.获取桌面:screen\n" \
           u"4.获取某个文件夹中的内容:folder + 路径  例如C:/Users/***/Desktop 常用路径\n" \
           u"5.传输文件:file+路径 例如 file D:/***  \n" \
           u"6.让电脑说话:voice + 内容\n" \
           u"7.启用消息助手(默认关闭):ast\n" \
           u"8.关闭消息助手:astc"
flag = 0 #消息助手开关
nowTime = time.localtime()
s=str(nowTime.tm_year)+'_'+str(nowTime.tm_mon)+'_'+str(nowTime.tm_mday)+ '_'+str(nowTime.tm_hour)+'_'+str(nowTime.tm_min)
filename = s +'.txt'
myfile = open('C:\\Users\\***\\Desktop\\wechat\\chat_record\\'+filename, 'w')


def list_folders_files(path):
    """
    返回 "文件夹" 和 "文件" 名字

    :param path: "文件夹"和"文件"所在的路径
    :return:  (list_folders, list_files)
            :list_folders: 文件夹
            :list_files: 文件
    """
    list_folders = []
    list_files = []
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path):
            list_folders.append(file)
        else:
            list_files.append(file)
    return (list_folders, list_files)



@itchat.msg_register('Text')
def text_reply(msg):
    global flag
    message = msg['Text']
    fromName = msg['FromUserName']
    toName = msg['ToUserName']
    s=str(nowTime.tm_year)+'_'+str(nowTime.tm_mon)+'_'+str(nowTime.tm_mday)+ '_'+str(nowTime.tm_hour)+'_'+str(nowTime.tm_min)
    if toName == "filehelper":
        if message == "cap":
            cap = cv2.VideoCapture(0)
            time.sleep(0.5)
            ret, img = cap.read()
            temp=s+'.jpg'
            cv2.imwrite('C:\\Users\\***\\Desktop\\wechat\\photo\\'+temp, img)
            itchat.send('@img@%s'%r'C:\\Users\\***\\Desktop\\wechat\\photo\\'+temp, 'filehelper')
            cap.release()
        if message[0:5] == "voice":
            m = message.strip(message[0:6])
            speak.Speak(m)
        if message[0:6]== "folder":
            path = message.strip(message[0:7])
            temp=[]
            (list_folders, list_files) = list_folders_files(path)  
            itchat.send('此路径下的文件夹有:', 'filehelper')
            itchat.send('\n'.join(str(i) for i in list_folders), 'filehelper')           
            itchat.send('此路径下的文件有(包括其路径 方便复制):','filehelper')
            for fileName in list_files:
                if(path[-1]=='/'):
                    filePath = path + fileName
                else:
                    filePath = path + '/' + fileName
                string=(fileName+ '      ' + filePath)
                temp.append(string)
            itchat.send('\n'.join(str(i) for i in temp),'filehelper')
        if message[0:4] == "file":
            path = message.strip(message[0:5])  
            newpath = path.encode("utf-8").decode("utf-8")
            itchat.send_file(newpath,'filehelper')
        if message[0:3] == "cmd":
            command = message.strip(message[0:4])
            output = os.popen(command)
            info = output.readlines()
            a=[]
            for line in info:
                a.append(line.strip('\r'))
            b=''.join(a)
            itchat.send(b, 'filehelper')    
        if message == "screen":
            a=ImageGrab.grab()
            screen=s+'.jpg'
            a.save(r'C:\\Users\\***\\Desktop\\wechat\\screen\\'+screen)
            itchat.send('@img@%s'%r'C:\\Users\\***\\Desktop\\wechat\\screen\\'+screen, 'filehelper')
        if message == "ast":
            flag = 1
            itchat.send("消息助手已开启", "filehelper")
        if message == "astc":
            flag = 0
            itchat.send("消息助手已关闭", "filehelper")
    elif flag == 1:
        itchat.send(sendMsg, fromName)
        myfile.write(message)
        myfile.write("\n")
        myfile.flush()
        


if __name__ == '__main__':
    itchat.auto_login()
    itchat.send(usageMsg, "filehelper")
    itchat.run()

注意:标注 ** 的是用户名,你也可以使用别的的路径

使用截图
在这里插入图片描述
这个cap我调整了好多次才没拍到我丑陋的宿舍
在这里插入图片描述
电脑屏幕的截图(快夸好看?):
在这里插入图片描述
我的一个智障室友
在这里插入图片描述
在本地保存的聊天文件:
我是根据时间命名的聊天记录,每开一次就会新增一个
在这里插入图片描述
之前查看的文件夹:
在这里插入图片描述

那就这样吧,而且我感觉我女朋友会打我,不怂!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值