首先,我们要先看看微信远程控制电脑的原理是什么呢?
我们可以利用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.com
smtphost = smtp.sina.com
port = 25
username = XXX@sina.com
password = XXX
[Boss]
mail = XXX@qq.com
timelimit = 2
[Command]
shutdown=shutdown -f -s -t 100 -c closing...
dir=dir
[Open]
music = F:Masetti - Our Own Heaven.mp3
video = F:Jai Waetford - Shy.mp4
notepad = notepad
excutor.py
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import os
import win32api
from mccLog import mccLog
class 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 ConfigParser
import os,sys
class 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 logging
from datetime import datetime
class mccLog(object):
def __init__(self):
logging.basicConfig(
level=logging.DEBUG,
format='4({:N74(Q!!4(4(1Ф4(4( !54( (! (4(!4(4(4)}}}|}}}|4(4(4("n4(4(е聍顽兙4(L4(rjgOGj~/7knBjZ?:>GrGj7惒"wbj~~n"Oj"j{Z>+jW'r/Fc"Bg&7C3Z"G4(4(brZj3ro疒j惚r'&*rokkR2 |