微信远程控制电脑(Python 版)

作者: 极客学院Wiki | 来源:发表于2016-04-13 11:51 被阅读1457次
    微信远程控制电脑(Python 版)

    更多 Python 学习请加群:485901263

    本文首发于2014年12月23日<a rel="nofollow" href="http://blog.kingname.info/2014/12/23/A-Totally-Amazing/" "="" style="box-sizing: border-box; color: rgb(45, 133, 202); background-color: transparent;">http://blog.kingname.info/2014/12/23/A-Totally-Amazing/,2016年4月12日修订并增加沙盒模式的内容。程序第一版使用Python2.7开发,修订后使用Python3.5重构。
    请想象一下这样一个场景,你下班/放学回家,突然想起来公司/学校的电脑没有关。于是,你拿出手机,点开微信,发送一条消息。几秒钟以后,远处的电脑默默地关机了。
    实际上使用任何可以发送邮件的程序都可以实现这个功能。但是因为微信比较普及,所以就用微信的发送邮件功能做吧。
    那么我们开始介绍下它是怎么实现的吧。

    设计原理

    在需要被控制的电脑上运行一个Python程序,这个程序会周期性的扫描一个配置好的邮箱。如果收到由特定邮件地址发送来的邮件,就解析邮件的标题,如果标题包含关键词,例如关机,播放音乐等等,就执行关键词对应的命令。

    术语定义

    本程序需要使用两个邮箱,我给他们取名字为【主人邮箱】和【奴隶邮箱】。
    主人邮箱:下达命令的邮箱。
    奴隶邮箱:接受命令并被Python程序扫描的邮箱。
    建议奴隶邮箱使用小号,主人邮箱使用大号。本文使用临时申请的一个新浪邮箱作为奴隶邮箱。目前奴隶邮箱使用新浪邮箱测试通过,其他邮箱未做测试。

    文件结构

    程序由两部分构成:

    _config.ini为配置文件,用于配置主人邮箱,奴隶邮箱和手工添加需要执行的命令

    auto.py为程序的主体文件,相关的实现代码均在里面

    程序实现

    程序使用Python的poplib提供的函数,周期性读取奴隶邮箱最新的一封邮件,如果这封邮件是主人邮箱发送的,并且标题在_config.ini

    文件中有定义,则执行本标题定义的操作。

    例如,_config.ini

    文件中有如下定义:

    music=D:\backup\Music\Intro.mp3

    主人邮箱发送一份邮件,标题为music,电脑就会调用默认播放器,播放D盘中的这个名叫Intro.mp3的音乐。

    如果这个Intro.mp3本身只有1秒钟,且没有内容,而音乐播放器设置为随机播放,就间接地实现了打开播放器随机播放音乐的目的。

    目前程序可以实现两类功能:运行命令与打开文件。

    运行命令

    其中运行命令的原理是:

    os.system(command)

    理论上任何在CMD命令提示符下可以执行的命令,在这里都可以执行。_config.ini
    中默认提供了两个样例,一个关闭计算机:

    shutdown=shutdown -f -s -t 10 -c closing...

    另一个是列出当前目录:

    dir=dir

    等号左侧为此命令的名字,也就是在邮件中可以发送的标题内容,等号右侧为命令本身。

    打开文件

    打开文件的功能通过pywin32实现:
    win32api.ShellExecute(0, 'open', open_file, '','',1)
    其中,open_file为文件在电脑中的位置。函数调用Windows的API来运行程序,效果和用鼠标双击相同。

    运行流程

    程序运行以后,先加载_config.ini,读取主人邮箱和奴隶邮箱,并确定扫描频率(time_limit)为多少秒检查一次邮箱。同时使用字典将命令的名称和命令本身添加到内存中。接下来的操作如下:

    微信远程控制电脑(Python 版)

    使用主人邮箱发送相应的命令名称以后,就能触发电脑的相关操作。

    程序配置

    打开_config.ini文件:

    [Slave]

    pophost填写奴隶邮箱的pop3服务器,例如新浪的pop3服务器为 pop.sina.com

    smtphost填写奴隶邮箱的SMTP服务器,例如新浪的SMTP服务器为 smtp.sina.com

    username为奴隶邮箱的邮箱号

    password为奴隶邮箱的密码

    必须要先在新浪邮箱的账户控制中允许客服端收件,并打开POP3和SMTP协议,否则会出错。如图所示:

    微信远程控制电脑(Python 版)

    [Boss]

    mail为主人邮箱号

    timelimit控制程序检查邮箱的频率,默认为300秒,也就是5分钟

    [Command]

    这个section的内容是可以使用Python运行的cmd命令,理论上讲,任何Python可以执行的命令都可以添加到这里。
    名字 = 命令

    [Open]

    这个section下的内容为可以通过Python打开的文件或者内容,例如打开记事本,打开音乐等等。
    名字 = 地址

    沙盘模式

    沙盘模式可以无限制的扩展程序的功能,通过邮件将新的Python代码直接写入到对方电脑并运行。

    使用主人邮箱往奴隶邮箱发送命令,例如:
    sandbox:test.py$n$import win32api$c$if 1 + 1 == 2:$c$$$$$win32api.MessageBox(0, 'sandbox', 'this is sandbox')

    格式:
    sandbox:文件名$n$代码

    其中预定义的标记如下:

    $n$:文件名与代码的分隔符
    $c$:换行
    $:空格,4个$连着用表示缩进

    沙盒模式的原理是,将邮件标题中的代码转换成Python能运行的代码,然后保存到本地,再使用os.system()执行。

    之所以沙盒模式的代码这么奇怪,是因为需要将包含换行和缩进信息的Python代码写到一行中。因为邮箱的正文是按照一定的协议保存内容的,并不方便直接读取,因此还是使用邮件标题来发送会比较方便。

    使用微信控制电脑这一部分的代码,请戳->https://github.com/kingname/RemoteControl/tree/master/mcc使用微信来控制电脑的程序,由于需要邮箱作为中介,由于可能出现邮箱不稳定或者邮箱的运营商修改内容的保存格式,就会导致邮件无法解析。

    为了让一切尽在掌握,通过自己设计一个Web服务器,自己做一个可以用手机访问的网页。然后通过这个网页来下达命令,这样不仅摆脱了邮箱的不方便,还能自定义数据的输入格式,使得沙盒模式的代码书写方式更加的友好。这一部分的代码,请戳->https://github.com/kingname/RemoteControl/tree/master/wcc
    再进一步,使用wxPython设计图形界面程序,再使用Socket通信可以使得程序的通信更加的即时,添加上读取远程电脑屏幕的功能,于是一个简易的远程控制程序就做好了。这一部分的代码,请戳->https://github.com/kingname/RemoteControl/tree/master/uiControl

    相关文章

      网友评论

        本文标题:微信远程控制电脑(Python 版)

        本文链接:https://www.haomeiwen.com/subject/tywwlttx.html