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

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

 [[401439]]

一、前言

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

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

二、实现原理

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

运行程序,让程序不停地读取邮件

用手机给电脑发送邮件

判断是否读取到指定主题的邮件,如果有,则获取邮件内容

根据邮件内容,执行预设的函数

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

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

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

三、读取邮件

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

  1. pip install imbox 

读取邮件的代码如下: 

  1. from imbox import Imbox  
  2. def read_mail(username, password):  
  3.     with Imbox('imap.163.com', username, password, ssl=True) as box:  
  4.         all_msg = box.messages(unread=True 
  5.         for uid, message in all_msg:  
  6.             # 如果是手机端发来的远程控制邮件  
  7.             if message.subject == 'Remote Control':  
  8.                 # 标记为已读  
  9.                 box.mark_seen(uid)  
  10.                 return message.body['plain'][0] 

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

  1. all_msg = box.messages(unread=True

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

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

四、截图

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

  1. pip install pillow 

截图的代码很简单: 

  1. from PIL import ImageGrab  
  2. def grab(sender, to):  
  3.     # 截取电脑全屏  
  4.     surface = ImageGrab.grab()  
  5.     # 将截屏保存为surface.jpg  
  6.     surface.save('surface.jpg')  
  7.     # 将截屏发送给手机  
  8.     send_mail(sender, to, ['surface.jpg']) 

其中send_mail的代码如下: 

  1. import yagmail  
  2. def send_mail(sender, to, contents):  
  3.     smtp = yagmail.SMTP(user=senderhost='smtp.163.com' 
  4.     smtp.send(to, subject='Remote Control'contentscontents=contents) 

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

五、关机

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

  1. import os  
  2. def shutdown():  
  3.  # 关机  
  4.     os.system('shutdown -s -t 0') 

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

六、完整代码

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

  1. def main():  
  2.  # 电脑用来发送邮件已经电脑读取的邮箱  
  3.     username = 'sockwz@163.com'  
  4.     password = '********'   
  5.  # 手机端的邮箱  
  6.     receiver = '2930777518@qq.com'   
  7.  # 读取邮件的时间间隔  
  8.     time_space = 5   
  9.  # 注册账户  
  10.     yagmail.register(username, password)     
  11.     # 循环读取  
  12.     while True:  
  13.         # 读取未读邮件  
  14.         msg = read_mail(username, password)  
  15.         if msg:  
  16.          # 根据不同的内容执行不同操作  
  17.             if msg == 'shutdown':  
  18.                 shutdown() 
  19.             elif msg == 'grab':  
  20.                 grab(username, receiver)  
  21.         time.sleep(time_space) 

其中: 

  1. yagmail.register(username, password) 

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

  1. pip install keyring 

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

  1. import os  
  2. import time  
  3. import yagmail  
  4. from imbox import Imbox  
  5. from PIL import ImageGrab  
  6. def send_mail(sender, to, contents):  
  7.     smtp = yagmail.SMTP(user=senderhost='smtp.163.com' 
  8.     smtp.send(to, subject='Remote Control'contentscontents=contents)  
  9. def read_mail(username, password):  
  10.     with Imbox('imap.163.com', username, password, ssl=True) as box:  
  11.         all_msg = box.messages(unread=True 
  12.         for uid, message in all_msg:  
  13.             # 如果是手机端发来的远程控制邮件  
  14.             if message.subject == 'Remote Control': 
  15.                  # 标记为已读  
  16.                 box.mark_seen(uid)  
  17.                 return message.body['plain'][0]  
  18. def shutdown():  
  19.     os.system('shutdown -s -t 0')  
  20. def grab(sender, to):  
  21.     surface = ImageGrab.grab()  
  22.     surface.save('surface.jpg')  
  23.     send_mail(sender, to, ['surface.jpg'])  
  24. def main():  
  25.     username = 'sockwz@163.com'  
  26.     password = '你的授权码'  
  27.     receiver = '2930777518@qq.com' 
  28.     time_space = 5  
  29.     yagmail.register(username, password)  
  30.     while True:  
  31.         # 读取未读邮件  
  32.         msg = read_mail(username, password)  
  33.         if msg:  
  34.             if msg == 'shutdown':  
  35.                 shutdown()  
  36.             elif msg == 'grab':  
  37.                 grab(username, receiver)  
  38.         time.sleep(time_space)  
  39. if __name__ == '__main__':  
  40.     main()  

 

责任编辑:庞桂玉 来源: Python编程
相关推荐

2013-09-09 11:12:06

网络人远程控制软件

2013-08-12 17:27:53

远程控制软件

2014-01-07 17:21:27

远程控制

2013-12-20 16:43:33

远程开机关机

2014-10-14 18:03:11

远程监控

2013-12-10 18:16:31

2014-01-15 15:01:54

远程控制

2014-01-17 17:33:32

远程开机

2023-09-18 14:41:56

2013-08-07 09:58:01

2013-11-07 14:12:36

远程控制IT管理

2013-09-02 17:39:29

2013-09-29 10:37:32

2013-10-14 10:19:26

2015-07-15 12:53:05

Node.jsSocket.io远程控制

2013-08-29 17:05:16

2014-03-05 10:55:25

远程控制

2012-04-10 14:57:30

Windows桌面远程控制Linux

2016-01-15 15:07:09

向日葵安卓开发

2009-04-22 09:43:28

点赞
收藏

51CTO技术栈公众号