博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用python实现用微信远程控制电脑
阅读量:6959 次
发布时间:2019-06-27

本文共 10794 字,大约阅读时间需要 35 分钟。

首先,我们要先看看微信远程控制电脑的原理是什么呢? 

我们可以利用Python的标准库控制本机电脑,然后要实现远程的话,我们可以把电子邮件作为远程控制的渠道,我们用Python自动登录邮箱检测邮件,当我们发送关机指令给这个邮箱的时候,若Python检测到相关的指令,那么Python直接发送本机的相关命令。 
下面来分析一下该项目: 
1.需求分析 
1.范围:用Python开发一个远程操控电脑的项目。 
2.总体要求: 
 2.1  总体功能要求:能够通过该软件远程控制该软件所在的电脑的重启或关机操作。 
 2.2  系统要求:开发语言使用Python,并且开发出来的程序能在Windows运行。 
2.设计 
首先,我们可以利用Python的标准库控制本机电脑,然后要实现远程的话,我们可以把电子邮件作为远程控制的渠道,我们用Python自动登录邮箱检测邮件,当我们发送关机指令给这个邮箱的时候,若Python检测到关机的指令,那么Python直接发送本机的关闭。 
3.编写 
本项目的流程图如下 
这里写图片描述 
第一步,需要注册一个新浪邮箱。然后点击新浪邮箱点击右上角设置如图 
这里写图片描述 
选择“客户端pop/imap/smtp” 
这里写图片描述 
打开新浪邮箱的SMTP与POP3功能 
这里写图片描述 
具体实现代码: 
配置文件config.ini

[Slave]pophost = pop.sina.comsmtphost = smtp.sina.comport = 25username = XXX@sina.compassword = XXX[Boss]mail = XXX@qq.comtimelimit = 2[Command]shutdown=shutdown -f -s -t 100 -c closing...dir=dir[Open]music = F:Masetti - Our Own Heaven.mp3video = F:Jai Waetford - Shy.mp4notepad = notepad

excutor.py

#coding:utf-8import sysreload(sys)sys.setdefaultencoding("utf-8")import osimport win32apifrom mccLog import mccLogclass executor(object):    def __init__(self,commandDict,openDict):        '''        创建方法        :param commandDict:        :param openDict:        '''        self.mccLog = mccLog()        self.commandDict = commandDict        self.openDict = openDict    def execute(self,exe,mailHelper):        self.mailHelper = mailHelper        subject = exe['subject']        # self.mccLog.mccWriteLog(u'开始处理命令')        print u'start to process'        if subject !='pass':            self.mailHelper.sendMail('pass','Slave')            if subject in self.commandDict:                # self.mccLog.mccWriteLog(u'执行命令!')                print u'start command'                try:                    command = self.commandDict[subject]                    os.system(command)                    self.mailHelper.sendMail('Success','Boss')                    # self.mccLog.mccWriteLog(u'执行命令成功!')                    print u'command success'                except Exception,e:                    # self.mccLog.mccError(u'执行命令失败'+ str(e))                    print 'command error'                    self.mailHelper.sendMail('error','boss',e)            elif subject in self.openDict:                # self.mccLog.mccWriteLog(u'此时打开文件')                print u'open the file now'                try:                    openFile = self.openDict[subject]                    win32api.ShellExecute(0,'open',openFile,'','',1)                    self.mailHelper.sendMail('Success','Boss')                    # self.mccLog.mccWriteLog(u'打开文件成功!')                    print u'open file success'                except Exception,e:                    # self.mccLog.mccError(u'打开文件失败!' + str(e))                    print u'open file error'                    self.mailHelper.sendMail('error','Boss',e)            elif subject[:7].lower() =='sandbox':                self.sandBox(subject[8:])            else:                self.mailHelper.sendMail('error','Boss','no such command!')    def sandBox(self,code):        name = code.split('$n$')[0]        code = code.split('$n$')[1]        codestr = '\n'.join(code.split('$c$'))        codestr = codestr.replace('$',' ')        with open(name,'a') as f:            f.write(codestr)        os.system('python' + name)

configReader.py

#-*-coding:utf-8-*-import ConfigParserimport os,sysclass configReader(object):    def __init__(self,configPath):        configFile = os.path.join(sys.path[0],configPath)        self.cReader = ConfigParser.ConfigParser()        self.cReader.read(configFile)    def readConfig(self,section,item):        return self.cReader.get(section,item)    def getDict(self,section):        commandDict = {}#字典        items = self.cReader.items(section)        for key,value in items:            commandDict[key] = value        return commandDict

日志文件mccLog.py

#-*-coding:utf-8-*-import loggingfrom datetime import datetimeclass mccLog(object):    def __init__(self):        logging.basicConfig(            level=logging.DEBUG,            format='%(asctime)s %(levelname)s %(message)s',            datefmt='%Y-%m-%d %H:%M:%S',            filename=datetime. now().strftime('%Y%m%d%H%M%S') + '.log',            filemode='a'        )    def mccWriteLog(self,logContent):            logging.info(logContent)    def mccError(self,errorContent):            logging.error(errorContent)

mailHelper.py

#-*-coding:utf-8-*-import sysreload(sys)sys.setdefaultencoding("utf-8")from email.mime.text import MIMETextfrom configReader import configReaderfrom mccLog import mccLogimport poplibimport smtplibimport reclass mailHelper(object):    CONFIGPATH = 'config.ini'    def __init__(self):        '''        初始化邮件        '''        self.mccLog = mccLog()        cfReader = configReader(self.CONFIGPATH)        self.pophost = cfReader.readConfig('Slave','pophost')        self.smtphost = cfReader.readConfig('Slave','smtphost')        self.port = cfReader.readConfig('Slave','port')        self.username = cfReader.readConfig('Slave','username')        self.password = cfReader.readConfig('Slave','password')        self.bossMail = cfReader.readConfig('Boss','mail')        self.loginMail()        self.configSlaveMail()    def loginMail(self):        '''        验证登陆        :return:        '''        self.mccLog.mccWriteLog('start to login the E-mail')        print 'start to login e-mail'        try:            self.pp = poplib.POP3_SSL(self.pophost)            self.pp.set_debuglevel(0)#可以为0也可以为1,为1时会显示出来            self.pp.user(self.username)#复制            self.pp.pass_(self.password)            self.pp.list()#列出赋值            print 'login successful!'            self.mccLog.mccWriteLog('login the email successful!')            print 'login the email successful!'        except Exception,e:            print 'Login failed!'            self.mccLog.mccWriteLog('Login the email failed!')            exit()    def acceptMail(self):        '''        接收邮件        :return:        '''        self.mccLog.mccWriteLog('Start crawling mail!')        print 'Start crawling mail'        try:            ret = self.pp.list()            mailBody = self.pp.retr(len(ret[1]))            self.mccLog.mccWriteLog('Catch the message successfully')            print 'Catch the message successfully'            return mailBody        except Exception,e:            self.mccLog.mccError('Catch the message failed' + e)            print 'Catch the message failed'            return None    def analysisMail(self,mailBody):        '''        正则分析邮件        :param mailBody:        :return:        '''        self.mccLog.mccWriteLog('Start crawling subject and sender')        print 'Start crawling subject and sender'        try:            subject = re.search("Subject: (.*?)',",str(mailBody[1]).decode('utf-8'),re.S).group(1)            print subject            sender = re.search("'X-Sender: (.*?)',",str(mailBody[1]).decode('utf-8'),re.S).group(1)            command = {'subject':subject,'sender':sender}            self.mccLog.mccWriteLog("crawling subject and sender successful!")            print 'crawling subject and sender successful'            return command        except Exception,e:            self.mccLog.mccError("crawling subject and sender failed!" + e)            print 'crawling subject and sender failed!'            return None    def sendMail(self,subject,receiver,body='Success'):        '''        发送邮件        :param subject:        :param receiver:        :param body:        :return:        '''        msg = MIMEText(body,'plain','utf-8')        #中文需要参数utf-8,单字节字符不需要        msg['Subject'] = subject        msg['from'] = self.username        self.mccLog.mccWriteLog('Start sending mail' + 'to' +receiver)        print 'Start sending mail'        if receiver == 'Slave':            try:                self.handle.sendmail(self.username,self.username,msg.as_string())                self.mccLog.mccWriteLog('Send the message successfully')                print 'Send the message successfully'            except Exception,e:                self.mccLog.mccError('Send the message failed' + e)                print 'Send the message failed'                return False        elif receiver == 'Boss':            try:                self.handle.sendmail(self.username,self.bossMail,msg.as_string())                self.mccLog.mccWriteLog('Send the message successfully')                print 'Send the message successfully'            except Exception,e:                self.mccLog.mccError('Send the message failed!' + e)                print 'Send the message failed!'                return False    def configSlaveMail(self):        '''        配置邮件        :return:        '''        self.mccLog.mccWriteLog('Start configuring the mailbox')        print 'Start configuring the mailbox'        try:            self.handle = smtplib.SMTP(self.smtphost, self.port)            self.handle.login(self.username, self.password)            self.mccLog.mccWriteLog('The mailbox configuration is successful')            print 'The mailbox configuration is successful'        except Exception, e:            self.mccLog.mccError('The mailbox configuration is failed' + e)            print 'The mailbox configuration is failed'            exit()## if __name__=='__main__':#     mail = mailHelper()#     body = mail.acceptMail()#     print body#     print mail.analysisMail(body)#     mail.sendMail('OK','Slave')

weiChatControlComputer.py

#-*-coding:utf-8-*-import sysreload(sys)sys.setdefaultencoding("utf-8")import timeimport sysfrom mailHelper import mailHelperfrom excutor import executorfrom configReader import configReader__Author__ = 'william'__Verson__ = 0.5reload(sys)sys.setdefaultencoding('utf-8')class MCC(object):    CONFIGPATH = 'config.ini'    KEY_COMMAND = 'Command'    KEY_OPEN = 'Open'    KEY_BOSS = 'Boss'    KEY_TIMELIMIT = 'timelimit'#扫描时间的频率    def __init__(self):        self.mailHelper = mailHelper()        self.configReader = configReader(self.CONFIGPATH)        commandDict = self.configReader.getDict(self.KEY_COMMAND)        openDict = self.configReader.getDict(self.KEY_OPEN)        self.timeLimit = int(self.configReader.readConfig(self.KEY_BOSS,self.KEY_TIMELIMIT))        self.excutor = executor(commandDict,openDict)        self.toRun()    def toRun(self):        '''        实现轮训操作        :return:        '''        while True:            self.mailHelper = mailHelper()            self.run()            time.sleep(self.timeLimit)    def run(self):        mailBody = self.mailHelper.acceptMail()        if mailBody:            exe = self.mailHelper.analysisMail(mailBody)            if exe:                self.excutor.execute(exe,self.mailHelper)if __name__ == '__main__':    mcc = MCC()

运行截图: 

这里写图片描述 
4.总结 
在这个小项目的编写过程中,知道了项目开发的基本流程并且走了一遍,通过项目管理的方式去开发项目,并且在这个小项目开发的过程中,复习了Python一些初级阶段的基础知识,并且更深刻体会到从项目的设计到项目的实施,以及项目的测试运维等步骤需要程序员深刻的理解,这样才能在项目中逐渐完善自我。

待续。。。

转载于:https://www.cnblogs.com/xyou/p/8926201.html

你可能感兴趣的文章
重置otrs登录密码
查看>>
CentOS下搭建SVN服务器
查看>>
#15、#16 网络的基本构成与网络的几协议
查看>>
视频客户端电脑版去广告补丁V 1.0
查看>>
HTTP 499 状态码 nginx下 499错误
查看>>
shell 九九乘法表
查看>>
接口调用-http和https
查看>>
undo backup optimization does not work on 11.2.0.1?
查看>>
F5 的SNAT的irules相关配置
查看>>
安装redis(3.2.9)
查看>>
shell脚本之一
查看>>
oracle 12c 关闭统计信息收集和启用统计信息收集
查看>>
修复微商城提交购物车时部分手机号码不识别
查看>>
基于 HTML5 Canvas 的 3D 模型列表贴图
查看>>
ORA-00000 这是什么报错!
查看>>
lvs-dr简单配置
查看>>
hadoop配置lzo
查看>>
脚本调试:一次换行符导致的报错
查看>>
mysql 之 主从同步(单向同步和双向同步)
查看>>
Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl
查看>>