1.前言很多时候,我们都有远程控制电脑的需求。比如你正在下载东西,下载完成后需要关闭电脑。或者你需要监控某个程序的健康状况等。今天我们就用Python实现一个远程监控和控制电脑的小程序。2.实现原理远程控制电脑听起来很高级,但实现起来其实很简单。实现原理如下:运行程序,让程序不断读取邮件用手机向电脑发送邮件,判断指定主题的邮件是否已阅读,如果已阅读,则获取邮件内容根据对电子邮件内容,执行预设功能学习如何远程控制计算机就像学习如何阅读电子邮件一样。当然,以上过程只是实现了对电脑的远程控制,并没有实现对电脑的监控。监控操作可以以截图的形式进行。我们可以预设一个指令,当邮件内容被读取为抓取时,我们会发送电脑截图。如何将电脑截图发送到手机邮箱,从而达到监控的效果。如何发送邮件可以参考博客:如何用Python发送邮件?.这里我就不细说了。让我们看看如何阅读电子邮件。3.阅读邮件阅读邮件需要使用收件箱模块。安装语句如下:pipinstallimbox读取邮件代码如下:fromimboximportImboxdefread_mail(username,password):withImbox('imap.163.com',username,password,ssl=True)asbox:all_msg=box.messages(unread=True)foruid,messageinall_msg:#如果是手机发送的远程控制邮件ifmessage.subject=='RemoteControl':#Markasreadbox.mark_seen(uid)returnmessage.body['plain'][0]首先,我们使用with语句打开邮箱。然后使用如下语句获取所有未读邮件:all_msg=box.messages(unread=True)获取未读邮件后,遍历邮件。将主题为“ReomteControl”的消息标记为已读并返回文本内容。这里需要注意的是,因为我们已经过滤掉了主题为“远程控制”的邮件,所以我们在用手机发送邮件时需要将主题设置为“远程控制”,这样可以避免其他邮件的干扰。4.截屏screenshot需要用到PIL模块,安装如下:pipinstallpillowscreenshot代码很简单:fromPILimportImageGrabdefgrab(sender,to):#截取电脑全屏surface=ImageGrab.grab()#将截图保存为surface。jpgsurface.save('surface.jpg')#发送截图到手机send_mail(sender,to,['surface.jpg'])其中send_mail代码如下:importyagmaildefsend_mail(sender,to,contents):smtp=yagmail.SMTP(user=sender,host='smtp.163.com')smtp.send(to,subject='RemoteControl',contentscontents=contents)关于发送邮件的介绍可以参考上面提到的博客。5、关机关机的操作很简单,我们可以使用python执行命令行语句即可。代码如下:importosdefshutdown():#Shutdownos.system('shutdown-s-t0')除了关机,我们还可以进行很多操作。对于一些复杂的操作,我们可以预先写一些bat文件,这里就不做演示了。六、完整代码上面每一部分的代码我们都写好了,接下来看主要部分的代码:defmain():#电脑是用来发邮件的,已经被电脑读取过了。username='sockwz@163.com'password='*********'#手机收件人='2930777518@qq.com'#读取邮件的时间间隔time_space=5#注册账号yagmail.register(username,password)#循环读取whileTrue:#读取未读邮件msg=read_mail(username,password)ifmsg:#根据不同的内容进行不同的操作ifmsg=='shutdown':shutdown()elifmsg=='grab':grab(username,receiver)time.sleep(time_space)其中:yagmail.register(username,password)会用到keyring模块,安装如下:pipinstallkeyring之后,我们可以根据自己的需要写一些其他的函数。下面是完整的代码:)defread_mail(username,password):withImbox('imap.163.com',username,password,ssl=True)asbox:all_msg=box.messages(unread=True)foruid,messageinall_msg:#如果是手机发送terminal远程控制邮件ifmessage.subject=='RemoteControl':#Markasreadbox.mark_seen(uid)returnmessage.body['plain'][0]defshutdown():os.system('shutdown-s-t0')defgrab(sender,to):surface=ImageGrab.grab()surface.save('surface.jpg')send_mail(sender,to,['surface.jpg'])defmain():username='sockwz@163.com'password='你的授权码'receiver='2930777518@qq.com'time_space=5yagmail.register(username,password)whileTrue:#readunreademailsmsg=read_mail(username,password)ifmsg:ifmsg=='shutdown':shutdown()elifmsg=='grab':grab(username,receiver)time.sleep(time_space)if__name__=='__main__':main()
