Python實現用手機監控遠程控制電腦

1、前言

不少時候,咱們都有遠程控制電腦的需求。好比正在下載某樣東西,須要讓電腦在下載完後關機。或者你須要監控一個程序的運行情況等。python

今天咱們就來用Python實現一個遠程監控並控制電腦的小程序。小程序

2、實現原理

聽起來遠程控制電腦好像很高級的樣子,可是實現起來其實很是簡單。實現原理以下:markdown

  1. 運行程序,讓程序不停地讀取郵件
  2. 用手機給電腦發送郵件
  3. 判斷是否讀取到指定主題的郵件,若是有,則獲取郵件內容
  4. 根據郵件內容,執行預設的函數

與其說是學習如何遠程控制電腦,還不如說是學習如何讀取郵件。固然,上面的的流程只實現了遠程控制電腦,而沒實現對電腦的監控。而監控的操做能夠以截圖的方式來進行。函數

咱們能夠預設一個指令,當讀取到郵件內容爲grab時,咱們就發送電腦截圖。如何將電腦截圖發送給手機郵箱,這樣就達到了監控的效果。oop

關於如何發送郵件能夠參考博客:如何用Python發送郵件?。這裏就再也不詳細說了。下面咱們看看如何讀取郵件。學習

3、讀取郵件

讀取郵件須要使用到imbox模塊,安裝語句以下:ui

pip install imbox
複製代碼

讀取郵件的代碼以下:spa

from imbox import Imbox

def read_mail(username, password):
    with Imbox('imap.163.com', username, password, ssl=True) as box:
        all_msg = box.messages(unread=True)
        for uid, message in all_msg:
            # 若是是手機端發來的遠程控制郵件
            if message.subject == 'Remote Control':
                # 標記爲已讀
                box.mark_seen(uid)
                return message.body['plain'][0]

複製代碼

首先咱們用with語句,打開郵箱。而後經過下面語句獲取全部的未讀郵件:.net

all_msg = box.messages(unread=True)
複製代碼

獲取未讀郵件後,對郵件進行遍歷。將主題爲「Reomte Control」的郵件標記爲已讀,並返回文本內容。命令行

這裏須要注意,由於咱們篩選出了主題爲「Remote Control」的郵件,所以咱們在用手機發郵件的時候須要將主題設置爲「Remote Control」,這樣能夠避免其它郵件的干擾。

4、截圖

截圖須要使用到PIL模塊,安裝以下:

pip install pillow
複製代碼

截圖的代碼很簡單:

from PIL import ImageGrab

def grab(sender, to):
   	# 截取電腦全屏
    surface = ImageGrab.grab()
    # 將截屏保存爲surface.jpg
    surface.save('surface.jpg')
    # 將截屏發送給手機
    send_mail(sender, to, ['surface.jpg'])
複製代碼

其中send_mail的代碼以下:

import yagmail

def send_mail(sender, to, contents):
    smtp = yagmail.SMTP(user=sender, host='smtp.163.com')
    smtp.send(to, subject='Remote Control', contents=contents)
複製代碼

關於發送郵件的介紹能夠參考上面提到的博客。

5、關機

關機的操做很是簡單,咱們能夠用python來執行命令行語句便可。代碼以下:

import os

def shutdown():
	# 關機
    os.system('shutdown -s -t 0')
複製代碼

除了關機,咱們還能夠執行不少操做。對於一些複雜的操做,咱們能夠預編寫一些bat文件,這裏就不演示了。

6、完整代碼

上面咱們編寫了各個部分的代碼,而後再來看看主體部分的代碼:

def main():
	# 電腦用來發送郵件已經電腦讀取的郵箱
    username = 'sockwz@163.com'
    password = '********'
	
	# 手機端的郵箱
    receiver = '2930777518@qq.com'
	
	# 讀取郵件的時間間隔
    time_space = 5
	
	# 註冊帳戶
    yagmail.register(username, password)
    
    # 循環讀取
    while True:
        # 讀取未讀郵件
        msg = read_mail(username, password)
        if msg:
        	# 根據不一樣的內容執行不一樣操做
            if msg == 'shutdown':
                shutdown()
            elif msg == 'grab':
                grab(username, receiver)
        time.sleep(time_space)
複製代碼

其中:

yagmail.register(username, password)
複製代碼

會使用到keyring模塊,安裝以下:

pip install keyring
複製代碼

後面咱們能夠根據本身的需求編寫一些其它功能。下面是完整的代碼:

import os
import time
import yagmail
from imbox import Imbox
from PIL import ImageGrab


def send_mail(sender, to, contents):
    smtp = yagmail.SMTP(user=sender, host='smtp.163.com')
    smtp.send(to, subject='Remote Control', contents=contents)


def read_mail(username, password):
    with Imbox('imap.163.com', username, password, ssl=True) as box:
        all_msg = box.messages(unread=True)
        for uid, message in all_msg:
            # 若是是手機端發來的遠程控制郵件
            if message.subject == 'Remote Control':
                # 標記爲已讀
                box.mark_seen(uid)
                return message.body['plain'][0]


def shutdown():
    os.system('shutdown -s -t 0')


def grab(sender, to):
    surface = ImageGrab.grab()
    surface.save('surface.jpg')
    send_mail(sender, to, ['surface.jpg'])


def main():
    username = 'sockwz@163.com'
    password = '你的受權碼'
    receiver = '2930777518@qq.com'
    time_space = 5
    yagmail.register(username, password)
    while True:
        # 讀取未讀郵件
        msg = read_mail(username, password)
        if msg:
            if msg == 'shutdown':
                shutdown()
            elif msg == 'grab':
                grab(username, receiver)
        time.sleep(time_space)


if __name__ == '__main__':
    main()

複製代碼
相關文章
相關標籤/搜索