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

 更新时间:2021年04月27日 08:40:50   作者:ZackSock  
这篇文章主要介绍了Python实现用手机监控远程控制电脑的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、前言

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

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

二、实现原理

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

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

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

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

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

三、读取邮件

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

pip install imbox

读取邮件的代码如下:

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语句,打开邮箱。然后通过下面语句获取所有的未读邮件:

all_msg = box.messages(unread=True)

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

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

四、截图

截图需要使用到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)

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

五、关机

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

import os

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

除了关机,我们还可以执行很多操作。对于一些复杂的操作,我们可以预编写一些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)

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

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

到此这篇关于Python实现用手机监控远程控制电脑的方法的文章就介绍到这了,更多相关Python 手机监控远程控制电脑内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python开发入门——列表生成式

    python开发入门——列表生成式

    这篇文章主要介绍了python 列表生成式的相关资料,帮助大家更好的理解和学习python开发,感兴趣的朋友可以了解下
    2020-09-09
  • 聊聊python中令人迷惑的duplicated和drop_duplicates()用法

    聊聊python中令人迷惑的duplicated和drop_duplicates()用法

    这篇文章主要介绍了聊聊python中令人迷惑的duplicated和drop_duplicates()用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python Type Hints 学习之从入门到实践

    Python Type Hints 学习之从入门到实践

    Type Hints(类型注解)进一步强化了Python是一门强类型语言的特性,它在 Python3.5 中第一次被引入。使用Type Hints可以让我们编写出带有类型的Python代码,本文将详细介绍一下Type Hints,感兴趣的小伙伴可以关注一下
    2021-11-11
  • 关于pycharm中pip版本10.0无法使用的解决办法

    关于pycharm中pip版本10.0无法使用的解决办法

    近期在利用 pycharm 安装第三方库时会提示 pip 不是最新版本, 因此对 pip 进行更新,但是生成最新版本之后, pip 中由于缺少 main 函数,导致在 pycharm 中无法自动安装第三方库。本文就介绍一下如何解决
    2019-10-10
  • 如何使用Pytorch搭建模型

    如何使用Pytorch搭建模型

    本来是只用Tenorflow的,但是因为TF有些Numpy特性并不支持,比如对数组使用列表进行切片,所以只能转战Pytorch了(pytorch是支持的)。还好Pytorch比较容易上手,几乎完美复制了Numpy的特性(但还有一些特性不支持),怪不得热度上升得这么快。
    2020-10-10
  • python爬虫入门教程之点点美女图片爬虫代码分享

    python爬虫入门教程之点点美女图片爬虫代码分享

    这篇文章主要介绍了python爬虫入门教程之点点美女图片爬虫代码分享,本文以采集抓取点点网美女图片为例,需要的朋友可以参考下
    2014-09-09
  • Python2和Python3中print的用法示例总结

    Python2和Python3中print的用法示例总结

    在Python 3中接触的第一个很大的差异就是缩进是作为语法的一部分,这和C++等其他语言确实很不一样,所以要小心,其中python3和python2中print的用法有很多不同,这篇文章主要给大家介绍了关于Python2和Python3中print用法的相关资料,需要的朋友可以参考下。
    2017-10-10
  • 使用python的turtle函数绘制一个滑稽表情

    使用python的turtle函数绘制一个滑稽表情

    Turtle库是Python语言中一个很流行的绘制图像的函数库,今天通过实例代码给大家分享使用python的turtle函数绘制一个滑稽表情,一起看看吧
    2020-02-02
  • C#返回当前系统所有可用驱动器符号的方法

    C#返回当前系统所有可用驱动器符号的方法

    这篇文章主要介绍了C#返回当前系统所有可用驱动器符号的方法,涉及C#操作系统硬件驱动的相关技巧,需要的朋友可以参考下
    2015-04-04
  • python绘制堆叠条形图介绍

    python绘制堆叠条形图介绍

    大家好,本篇文章主要讲的是python绘制堆叠条形图介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12

最新评论