在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 使用微信控制電腦(Python 版)
101 種讓你的網(wǎng)頁看起來更酷的方法
Android 項(xiàng)目是如何使用 Kotlin 語言生成的 1/2
Nimbledroid 版本更新
使用TypeScript提高開發(fā)能力
利用 TensorFlow Serving 系統(tǒng)在生產(chǎn)環(huán)境中運(yùn)行模型
Google Play 榜單APP冷啟動速度分析報(bào)告
使用微信控制電腦(Python 版)
jQuery 3 中的新變動
RxAndroid 基礎(chǔ):第一部分
Swift in 2016
UI自動化測試基于Activity的封裝模式
2016年,有哪些適合你學(xué)習(xí)的編程語言?
Swift 響應(yīng)式編程
如何組合使用 VIM 編輯器與 IPYthon
如何使你的app更加流暢
介紹用來選擇輪廓圖像的一個(gè)類——Will J Miller
關(guān)于Android N 開發(fā)者預(yù)覽版的一些隨想

使用微信控制電腦(Python 版)

更多 Python 學(xué)習(xí)請加群:485901263

本文首發(fā)于2014年12月23日http://blog.kingname.info/2014/12/23/A-Totally-Amazing/,2016年4月12日修訂并增加沙盒模式的內(nèi)容。程序第一版使用Python2.7開發(fā),修訂后使用Python3.5重構(gòu)。

請想象一下這樣一個(gè)場景,你下班/放學(xué)回家,突然想起來公司/學(xué)校的電腦沒有關(guān)。于是,你拿出手機(jī),點(diǎn)開微信,發(fā)送一條消息。幾秒鐘以后,遠(yuǎn)處的電腦默默地關(guān)機(jī)了

實(shí)際上使用任何可以發(fā)送郵件的程序都可以實(shí)現(xiàn)這個(gè)功能。但是因?yàn)槲⑿疟容^普及,所以就用微信的發(fā)送郵件功能做吧。

那么我們開始介紹下它是怎么實(shí)現(xiàn)的吧。

設(shè)計(jì)原理

在需要被控制的電腦上運(yùn)行一個(gè)Python程序,這個(gè)程序會周期性的掃描一個(gè)配置好的郵箱。如果收到由特定郵件地址發(fā)送來的郵件,就解析郵件的標(biāo)題,如果標(biāo)題包含關(guān)鍵詞,例如關(guān)機(jī),播放音樂等等,就執(zhí)行關(guān)鍵詞對應(yīng)的命令。

術(shù)語定義

本程序需要使用兩個(gè)郵箱,我給他們?nèi)∶譃?strong>【主人郵箱】和【奴隸郵箱】。

主人郵箱:下達(dá)命令的郵箱。

奴隸郵箱:接受命令并被Python程序掃描的郵箱。

建議奴隸郵箱使用小號,主人郵箱使用大號。本文使用臨時(shí)申請的一個(gè)新浪郵箱作為奴隸郵箱。目前奴隸郵箱使用新浪郵箱測試通過,其他郵箱未做測試。

文件結(jié)構(gòu)

程序由兩部分構(gòu)成:

  • _config.ini為配置文件,用于配置主人郵箱,奴隸郵箱和手工添加需要執(zhí)行的命令
  • auto.py為程序的主體文件,相關(guān)的實(shí)現(xiàn)代碼均在里面

程序?qū)崿F(xiàn)

程序使用Python的poplib提供的函數(shù),周期性讀取奴隸郵箱最新的一封郵件,如果這封郵件是主人郵箱發(fā)送的,并且標(biāo)題在_config.ini文件中有定義,則執(zhí)行本標(biāo)題定義的操作。

例如,_config.ini文件中有如下定義:

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

主人郵箱發(fā)送一份郵件,標(biāo)題為music,電腦就會調(diào)用默認(rèn)播放器,播放D盤中的這個(gè)名叫Intro.mp3的音樂。

如果這個(gè)Intro.mp3本身只有1秒鐘,且沒有內(nèi)容,而音樂播放器設(shè)置為隨機(jī)播放,就間接地實(shí)現(xiàn)了打開播放器隨機(jī)播放音樂的目的。

目前程序可以實(shí)現(xiàn)兩類功能:運(yùn)行命令與打開文件。

運(yùn)行命令

其中運(yùn)行命令的原理是:

os.system(command)

理論上任何在CMD命令提示符下可以執(zhí)行的命令,在這里都可以執(zhí)行。_config.ini中默認(rèn)提供了兩個(gè)樣例,一個(gè)關(guān)閉計(jì)算機(jī):

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

另一個(gè)是列出當(dāng)前目錄:

dir=dir

等號左側(cè)為此命令的名字,也就是在郵件中可以發(fā)送的標(biāo)題內(nèi)容,等號右側(cè)為命令本身。

打開文件

打開文件的功能通過pywin32實(shí)現(xiàn):

win32api.ShellExecute(0, 'open', open_file, '','',1)

其中,open_file為文件在電腦中的位置。函數(shù)調(diào)用Windows的API來運(yùn)行程序,效果和用鼠標(biāo)雙擊相同。

運(yùn)行流程

程序運(yùn)行以后,先加載_config.ini,讀取主人郵箱和奴隸郵箱,并確定掃描頻率(time_limit)為多少秒檢查一次郵箱。同時(shí)使用字典將命令的名稱和命令本身添加到內(nèi)存中。接下來的操作如下:

http://wiki.jikexueyuan.com/project/geekdigest/images/python.png" alt="" />

使用主人郵箱發(fā)送相應(yīng)的命令名稱以后,就能觸發(fā)電腦的相關(guān)操作。

程序配置

打開_config.ini文件:

[Slave]

  • pophost填寫奴隸郵箱的pop3服務(wù)器,例如新浪的pop3服務(wù)器為 pop.sina.com
  • smtphost填寫奴隸郵箱的SMTP服務(wù)器,例如新浪的SMTP服務(wù)器為 smtp.sina.com
  • username為奴隸郵箱的郵箱號
  • password為奴隸郵箱的密碼
  • 必須要先在新浪郵箱的賬戶控制中允許客服端收件,并打開POP3和SMTP協(xié)議,否則會出錯(cuò)。如圖所示:

http://wiki.jikexueyuan.com/project/geekdigest/images/xinlan.png" alt="" />

[Boss]

  • mail為主人郵箱號
  • timelimit控制程序檢查郵箱的頻率,默認(rèn)為300秒,也就是5分鐘

[Command]

這個(gè)section的內(nèi)容是可以使用Python運(yùn)行的cmd命令,理論上講,任何Python可以執(zhí)行的命令都可以添加到這里。

名字 = 命令

[Open]

這個(gè)section下的內(nèi)容為可以通過Python打開的文件或者內(nèi)容,例如打開記事本,打開音樂等等。

名字 = 地址

沙盤模式

沙盤模式可以無限制的擴(kuò)展程序的功能,通過郵件將新的Python代碼直接寫入到對方電腦并運(yùn)行。

使用主人郵箱往奴隸郵箱發(fā)送命令,例如:

sandbox:test.py$n$import win32api$c$if 1 + 1 == 2:$c$$$$$win32api.MessageBox(0, 'sandbox', 'this is sandbox')

格式:

sandbox:文件名$n$代碼

其中預(yù)定義的標(biāo)記如下:

$n$:文件名與代碼的分隔符
$c$:換行
$:空格,4個(gè)$連著用表示縮進(jìn)

沙盒模式的原理是,將郵件標(biāo)題中的代碼轉(zhuǎn)換成Python能運(yùn)行的代碼,然后保存到本地,再使用os.system()執(zhí)行。

之所以沙盒模式的代碼這么奇怪,是因?yàn)樾枰獙瑩Q行和縮進(jìn)信息的Python代碼寫到一行中。因?yàn)猷]箱的正文是按照一定的協(xié)議保存內(nèi)容的,并不方便直接讀取,因此還是使用郵件標(biāo)題來發(fā)送會比較方便。

使用微信控制電腦這一部分的代碼,請戳->https://github.com/kingname/RemoteControl/tree/master/mcc

擴(kuò)展

使用微信來控制電腦的程序,由于需要郵箱作為中介,由于可能出現(xiàn)郵箱不穩(wěn)定或者郵箱的運(yùn)營商修改內(nèi)容的保存格式,就會導(dǎo)致郵件無法解析。

為了讓一切盡在掌握,通過自己設(shè)計(jì)一個(gè)Web服務(wù)器,自己做一個(gè)可以用手機(jī)訪問的網(wǎng)頁。然后通過這個(gè)網(wǎng)頁來下達(dá)命令,這樣不僅擺脫了郵箱的不方便,還能自定義數(shù)據(jù)的輸入格式,使得沙盒模式的代碼書寫方式更加的友好。這一部分的代碼,請戳->https://github.com/kingname/RemoteControl/tree/master/wcc

再進(jìn)一步,使用wxPython設(shè)計(jì)圖形界面程序,再使用Socket通信可以使得程序的通信更加的即時(shí),添加上讀取遠(yuǎn)程電腦屏幕的功能,于是一個(gè)簡易的遠(yuǎn)程控制程序就做好了。這一部分的代碼,請戳->https://github.com/kingname/RemoteControl/tree/master/uiControl

二維碼加群

更多 Python 技巧學(xué)習(xí),請掃描下方二維碼

http://wiki.jikexueyuan.com/project/geekdigest/images/1613.jpg" alt="" />