使用微信控制你的电脑
A totally amazing!!!
源代码请戳->https://github.com/kingname/MCC
实际上使用任何可以发送邮件的东西都可以。但是因为微信比较普及,所以就用微信的发送邮件功能做一个测试吧~~
文件结构
程序由两部分构成:
- _config.ini为配置文件,用于配置主人邮箱,奴隶邮箱和手工添加需要执行的命令
- auto.py为程序的主体文件,相关的实现代码均在里面
软件原理
本程序需要使用两个邮箱,我给他们取名字为【主人邮箱】和【奴隶邮箱】。
建议奴隶邮箱使用小号。主人邮箱使用大号,我是使用的我的QQ邮箱作为主人邮箱,临时申请的一个新浪邮箱作为奴隶邮箱。目前奴隶邮箱使用新浪邮箱测试通过,其他邮箱未做测试。各位有兴趣的朋友可以测试一下并反馈给我,非常感谢~
本程序使用Python的poplib提供的函数,周期性读取奴隶邮箱最新的一封邮件,如果这封邮件是主人邮箱发送的,并且标题在_config.ini文件中有定义,则执行本标题定义的操作。
例如,_config.ini文件中有如下定义:
music=D:backupMusicIntro.mp3
主人邮箱发送一份邮件,标题为music,电脑就会调用默认播放器,播放D盘中的这个名叫Intro.mp3的音乐。如果这个Intro.mp3本身只有1秒钟,且没有内容,而音乐播放器设置为随机播放,就间接地实现了打开播放器随机播放音乐的目的。
目前程序可以实现两类功能: 运行命令与打开文件。
运行命令
其中运行命令的原理是:
os.system(command)
理论上任何在CMD命令提示符下可以执行的命令,在这里都可以执行。_config.ini中默认提供了两个样例,一个关闭计算机:
shutdown=shutdown -f -s -t 10 -c closing...
另一个是列出当前目录:
dir=dir
等号左侧为此命令的名字,也就是在邮件中可以发送的标题内容,等号右侧为命令本身。注意等号左右均不能有空格。
打开文件
打开文件的原理是:
win32api.ShellExecute(0, 'open', open_file, '','',1)
其中,open_file为文件在电脑中的位置。函数调用Windows的API来运行程序,效果和用鼠标双击相同。
运行流程
程序运行以后,先加载_config.ini,配置主人邮箱和奴隶邮箱,并确定扫描频率(time_limit)为多少秒检查一次邮箱。同时使用字典将命令的名称和命令本身添加到内存中。接下来的操作如下:
使用主人邮箱发送相应的命令名称以后,就能触发电脑的相关操作。
程序配置
打开_config.ini文件:
- host填写奴隶邮箱的pop3服务器,例如新浪的pop3服务器为 pop.sina.com
- username为奴隶邮箱的邮箱号
- password为奴隶邮箱的密码
- boss_email为主人邮箱号
- time_limit控制程序检查邮箱的评论,默认为300秒,也就是5分钟
- <command>与</command>之间为命令区,此处可以使用任何能在CMD命令提示符中执行的命令格式为: 名字=命令 注意=左右不能出现空格
- <open_file></open_file>之间为可以打开的文件。任何在电脑上可以使用鼠标双击打开的程序、文件均可把其地址写在此处。格式为: 名字=地址 注意=左右不能出现空格
编译程序
使用py2exe编译。进入代码目测,执行以下代码:
python mysetup.py py2exe
本程序已经制作成教学视频,放在了极客学院,请戳:=>
http://www.jikexueyuan.com/course/1962.html
http://www.jikexueyuan.com/course/2120.html
- HDUOJ-----1085Holding Bin-Laden Captive!
- HDUOJ-----1098 Ignatius's puzzle
- 转--shell脚本备份mysql数据库
- NYOJ——————数的长度(斯特林公式的应用)
- 关于ssh命令的几个使用小技巧(r11笔记第27天)
- Golang语言社区--消息触发服务器启动基础模块分享
- NYOJ------汉诺塔(一)
- HDUOJ----Coin Change
- Golang语言社区--列出目录和遍历目录的方法
- HDUOJ-------单词数
- insert导致的性能问题大排查(r11笔记第26天)
- NYOJ-----最少乘法次数
- nyOJ-----韩信点兵
- HDUOJ-----A == B ?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一起来学演化计算-SBX模拟二进制交叉算子和DE差分进化算子
- 通过与C++程序对比,彻底搞清楚JAVA的对象拷贝
- Spring - application.yml 数字读取错误、eg: 000001
- Swagger2 UI 提示"请确保swagger资源接口正确"解决办法
- Manytasking Jmetal 代码反向解析 2_MMDTLZ
- GitLab服务器搭建
- MATP1生成测试SolutionSet
- 以猜数字游戏引出的分治算法的理解与思考
- MATP ManyTask Multitask Problem 和 Solution 的变量范围
- Sinopia安装部署
- Nginx的405 not allowed错误解决
- Linux免密登陆
- 一起来学matlab-matlab学习笔记8 基本绘图命令_2基本绘图操作
- 用一个图书库实例搞懂二分搜索树的底层原理
- 自已做动画及编写程序搞清楚最大堆的实现原理