Python实现用手机监控远程控制电脑

举报
北山啦 发表于 2021/05/26 00:43:29 2021/05/26
【摘要】 一、前言 很多时候,我们都有远程控制电脑的需求。比如正在下载某样东西,需要让电脑在下载完后关机。或者你需要监控一个程序的运行状况等。 今天我们就来用Python实现一个远程监控并控制电脑的小程序。 二、实现原理 听起来远程控制电脑好像很高级的样子,但是实现起来其实非常简单。实现原理如下: 运行程序,让程序不停地读取邮件用手机给电脑发送邮件判断是否读取到指定主题...

一、前言

很多时候,我们都有远程控制电脑的需求。比如正在下载某样东西,需要让电脑在下载完后关机。或者你需要监控一个程序的运行状况等。

今天我们就来用Python实现一个远程监控并控制电脑的小程序。

二、实现原理

听起来远程控制电脑好像很高级的样子,但是实现起来其实非常简单。实现原理如下:

  1. 运行程序,让程序不停地读取邮件
  2. 用手机给电脑发送邮件
  3. 判断是否读取到指定主题的邮件,如果有,则获取邮件内容
  4. 根据邮件内容,执行预设的函数

与其说是学习如何远程控制电脑,还不如说是学习如何读取邮件。当然,上面的的流程只实现了远程控制电脑,而没实现对电脑的监控。而监控的操作可以以截图的方式来进行。

我们可以预设一个指令,当读取到邮件内容为grab时,我们就发送电脑截图。如何将电脑截图发送给手机邮箱,这样就达到了监控的效果。

关于如何发送邮件可以参考博客:如何用Python发送邮件?。这里就不再详细说了。下面我们看看如何读取邮件。

三、读取邮件

读取邮件需要使用到imbox模块,安装语句如下:

pip install imbox

  
 
  • 1

读取邮件的代码如下:

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]


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

首先我们用with语句,打开邮箱。然后通过下面语句获取所有的未读邮件:

all_msg = box.messages(unread=True)

  
 
  • 1

获取未读邮件后,对邮件进行遍历。将主题为“Reomte Control”的邮件标记为已读,并返回文本内容。

这里需要注意,因为我们筛选出了主题为“Remote Control”的邮件,因此我们在用手机发邮件的时候需要将主题设置为“Remote Control”,这样可以避免其它邮件的干扰。

四、截图

截图需要使用到PIL模块,安装如下:

pip install pillow

  
 
  • 1

截图的代码很简单:

from PIL import ImageGrab

def grab(sender, to): # 截取电脑全屏 surface = ImageGrab.grab() # 将截屏保存为surface.jpg surface.save('surface.jpg') # 将截屏发送给手机 send_mail(sender, to, ['surface.jpg'])

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

其中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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

关于发送邮件的介绍可以参考上面提到的博客。

五、关机

关机的操作非常简单,我们可以用python来执行命令行语句即可。代码如下:

import os

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

除了关机,我们还可以执行很多操作。对于一些复杂的操作,我们可以预编写一些bat文件,这里就不演示了。

六、完整代码

上面我们编写了各个部分的代码,然后再来看看主体部分的代码:

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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

其中:

yagmail.register(username, password)

  
 
  • 1

会使用到keyring模块,安装如下:

pip install keyring

  
 
  • 1

后面我们可以根据自己的需求编写一些其它功能。下面是完整的代码:

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()


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

文章来源: zacksock.blog.csdn.net,作者:ZackSock,版权归原作者所有,如需转载,请联系作者。

原文链接:zacksock.blog.csdn.net/article/details/116177092

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。