精华内容
下载资源
问答
  • python实现远程控制手机
    2021-04-27 05:48:34

    (5)获取鼠标点击时的坐标:

    1def mousePressEvent(self, event):

    2 if event.buttons() & QtCore.Qt.LeftButton:

    3 x = event.x() -120

    4 y = event.y() -10

    5 text = "x: {0},y: {1}".format(x,y)

    6 if x>= 0 and y>= 0:

    7 m.position = (x, y)

    8 time.sleep( 0.1)

    9 m.click(Button.left, 1)

    10 print( text)

    (6)按钮绑定所设置的函数:

    1 def slot_init( self):

    2 self .button_open_camera.clicked.connect( self .button_open_camera_click)

    3 self .timer_camera.timeout.connect( self .show_camera)

    4 self .button_close.clicked.connect( self .close)

    (7)显示桌面功能函数,并设置点击时修改名称,可以随时关闭桌面

    1 def button_open_camera_click(self):

    2 if self.timer_camera.isActive() == False:

    3 self.timer_camera.start( 30)

    4 self.button_open_camera.setText( u'关闭')

    5 else:

    6 self.timer_camera.stop()

    7 self.cap.release()

    8 self.label_show_camera.clear()

    9 self.button_open_camera.setText( u'远程桌面')

    (8)显示桌面函数和退出程序函数

    1 def show_camera(self):

    2 im = ImageGrab.grab()

    3 imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR) # 转为opencv的BGR格式

    4 #imm = cv2.resize(imm, (1535, 863))

    5 self.image = imm

    6 # face = self.face_detect.align(self.image)

    7 # if face:

    8 # pass

    9 show =cv2.resize(self.image, ( 1536, 863))

    10 show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)

    11 print(show.shape[ 1], show.shape[ 0])

    12 # show.shape[1] = 640, show.shape[0] = 480

    13 showImage = QtGui.QImage(show.data, show.shape[ 1], show.shape[ 0], QtGui.QImage.Format_RGB888)

    14 self.label_show_camera.setPixmap(QtGui.QPixmap.fromImage(showImage))

    15 #cv2.setMouseCallback(showImage, mouse_click)

    16 # self.x += 1

    17 # self.label_move.move(self.x,100)

    18 # if self.x ==320:

    19 # self.label_show_camera.raise_()

    20 def closeEvent(self, event):

    21 ok = QtWidgets.QPushButton()

    22 cacel = QtWidgets.QPushButton()

    23 msg = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Warning, u"关闭", u"是否关闭!")

    24 msg.addButton(ok, QtWidgets.QMessageBox.ActionRole)

    25 msg.addButton(cacel, QtWidgets.QMessageBox.RejectRole)

    26 ok.setText( u'确定')

    27 cacel.setText( u'取消')

    28 # msg.setDetailedText('sdfsdff')

    29 if msg.exec_() == QtWidgets.QMessageBox.RejectRole:

    30 event.ignore()

    31 else:

    32 # self.socket_client.send_command(self.socket_client.current_user_command)

    33 if self.cap.isOpened():

    34 self.cap.release()

    35 if self.timer_camera.isActive():

    36 self.timer_camera.stop()

    37 event.accept()

    作者简介:李秋键,CSDN博客专家,CSDN达人课作者。硕士在读于中国矿业大学,开发有taptap竞赛获奖等。

    特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

    更多相关内容
  • 二、可以通过手机发个特定的mail,就可以控制电脑关机。 第一个步骤:申请一个邮箱,使这个邮箱与你的手机号码绑定,然后你在这个邮箱中设定如果有新的邮件就发短信通知,这样开机时往这个邮箱发个mail,我手机就会...
  • 如何用 Python 实现手机远程控制电脑

    千次阅读 2021-05-08 00:38:35
    来源:https://zacksock.blog.csdn.net一、前言很多时候,我们都有远程控制电脑的需求。比如正在下载某样东西,需要让电脑在下载完后关机。或者你需要监控一个程序的运行...

    来源:https://zacksock.blog.csdn.net



    一、前言

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

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

    二、实现原理

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

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

    2. 用手机给电脑发送邮件

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

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

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

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

    关于如何发送邮件可以参考博客:

    https://blog.csdn.net/ZackSock/article/details/112278615?spm=1001.2014.3001.5501

    这里就不再详细说了。下面我们看看如何读取邮件。

    三、读取邮件

    读取邮件需要使用到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()
    
    
    


    Pandas 官方文档中文版 PDF 下载

    2021-05-06

    < END >

    微信扫码关注,了解更多内容

    展开全文
  • 目前的数据工作中,数据科学家使用最多的工具语言就是Python,排在第二的工具语言是R语言。但这里有一个有趣的现象,那就是同时使用Python或者R语言的人,推荐别人使用Python的却远高于R语言。Why? 答案是: 1. ...

    目前的数据工作中,数据科学家使用最多的工具语言就是Python,排在第二的工具语言是R语言。但这里有一个有趣的现象,那就是同时使用Python或者R语言的人,推荐别人使用Python的却远高于R语言。Why?

    答案是:

    1. Python简单易学,极其容易上手,语法简单,处理速度会比R语言要快,而且无需把数据库切割。

    2. 市场前景好,是目前的趋势,就业也会更容易。

    3. 标准库非常庞大,特别的“功能齐全”,可以处理各种工作,其中就包含抓取和处理数据。

    Python作为一种应用极为广泛的语言,几乎在任何领域都能派上用场。想做Web有Flask / Django / Tornado;想做分布式有Celery;想做手机App有 Kivy ;想做数据分析有Pandas;想做可视化有Matplotlib / Seaborn / Plotly / Bokeh;想做机器学习有Tensorflow / PyTorch / MxNet......

    夸张一点说,几乎没有什么做不了的东西(笔芯)。小编今天分享一些可以用Python做的非常好玩的事情,大家都可以试试看~

    1、增加面试通过率(据真实事件改编)

    面试官:请实现一个中序表达式求值程序,支持四则运算和括号。比如输入'3+6/(3-2)',输出9。

    同学:我什么语言都能用吗?

    面试官:是的,但最好常用。

    同学:那我用python行吗?

    面试官:没问题。

    同学:eval(x)。

    面试官:(冷汗。。)同学你看看,这个程序是不是有点。。

    同学:啊!不安全对吧。(用正则表达式加了个检查,看是不是仅含四则运算和括号的表达式)你看,我还带语法报错,除零检测,浮点精度支持。是不是你都被我的机智感动了!

    面试官:(瀑布汗)额。。好吧你过了。。

    引言本项目旨在让大家理解远控软件的原理,通过远控桌面可以实现远程控制我们的电脑,更好更方便的管理电脑。文末将给出初始版的完整代码,需要使用到的其他工具也会有所说明。最终实现的效果就是只要用户点击了客户端的程序运行,我们就可以在服务端对其进行控制。效果如下:左边是客服端程序运行了,然后我们就可以在左边的另一台电脑上打开服务端程序进行控制,可以看到左边的屏幕图像也已经显示在了右边的电脑上。完整代码见文末!

    01

    远控流程

    1.1 环境要求

    本次环境使用的是python3.6.5+windows平台主要用的库有:图像处理库opencv,包括用来目标检测和图像处理等操作。Socket用来远程传输数据达到远程控制的效果;Threading模块用来创建多线程管理;Numpy模块用来辅助opencv对图像进行一些像素值操作;PIL模块用来获取屏幕图像数据;pynput.mouse用来控制鼠标点击事件。达到远程控制鼠标的作用。1.2 客户端讲解客户端在这里指的是被控制的电脑,就是我们需要受到控制的电脑。(1)首先是导入相关模块:

    1#客户端代码
    2import socket
    3import threading
    4import cv2
    5import numpy as np
    6from PIL import ImageGrab
    7from pynput.mouse import Button,Controller

    (2)接着创建一个鼠标控制器和用来接收服务端数据的函数。因为需要一直都接收数据,故需要嵌入循环。在这里客户端还需要接收数据的原因是,用来接收服务端传来的鼠标控制信息,要不然怎么实现鼠标控制桌面的效果呢。

     1#接受服务器返回的数据的函数
     2m = Controller()
     3def recvlink(client):
     4    while True:
     5        msg=client.recv(1024)
     6        msg=msg.decode('utf-8')
     7        print(msg)
     8        key = msg.split(",")
     9        xp = int(key[0])
    10        yp = int(key[1])
    11        m.position = ((xp,yp))
    12        m.click(Button.left,1)
    

    (3)创建ipv4的socket对象,使用TCP协议(SOCK_STREAM)。然后设置服务端IP地址,以及端口。这里用来向服务端传输数据,即传输桌面图像数据。注释代码如下:

     1#创建ipv4的socket对象,使用TCP协议(SOCK_STREAM)
     2client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     3#设置服务器ip地址,注意应该是服务器的公网ip
     4host='服务器的公网ip'
     5#设置要发送到的服务器端口,需要在云服务器管理界面打开对应端口的防火墙
     6port=设置的端口
     7#建立TCP协议连接,这时候服务器就会监听到到连接请求,并开始等待接受client发送的数据
     8client.connect((host,port))
     9#建立连接后,服务器端会返回连接成功消息
    10start_msg=client.recv(1024)
    11print(start_msg.decode('utf-8'))
    12#开启一个线程用来接受服务器发来的消息
    13t=threading.Thread(target=recvlink,args=(client,))
    14t.start()
    15p = ImageGrab.grab()#获得当前屏幕
    16quality = 25  # 图像的质量
    17encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), quality]
    18while True:
    19    im = ImageGrab.grab()
    20    imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
    21    imm = cv2.resize(imm, (1535, 863))
    22    img_encode = cv2.imencode(".jpg", imm, encode_param)[1]
    23    data_encode = np.array(img_encode)
    24    str_encode = data_encode.tostring()
    25    #print(len(str_encode))
    26    #输入要发送的信息
    27    sendmsg="kehu"
    28    #向服务器发送消息
    29    client.send(str_encode)
    30    if sendmsg=='quit':
    31        break
    32#结束时关闭客户端
    33client.close()
    

    1.3 服务端讲解服务端指的是用来控制远程电脑的那一端,为了方便使用,我们直接在服务器上使用即可。(1)导入使用到的模块:

    1#服务器端
    2import socket
    3import threading
    4import numpy as np
    5import cv2
    6import os
    

    (2)创建鼠标点击事件函数,用来获取鼠标点击的位置坐标:

    1print("等待连接---")
    2def mouse_click(event, x, y, flags, para):
    3    if event == cv2.EVENT_LBUTTONDOWN:  # 左边鼠标点击
    4        f=open("1.txt","w")
    5        f.write(str(x)+","+str(y))
    6        f.close()
    

    (3)创建服务器端接收数据函数,用来实时接收传输过来的图像数据并显示:

     1def recv_msg(clientsocket):
     2    while True:
     3        # 接受客户端消息,设置一次最多接受10240字节的数据
     4        recv_msg = clientsocket.recv(102400)
     5        # 把接收到的东西解码
     6        msg = np.fromstring(recv_msg, np.uint8)
     7        img_decode = cv2.imdecode(msg, cv2.IMREAD_COLOR)
     8        try:
     9            s=img_decode.shape
    10            img_decode=img_decode
    11            temp=img_decode
    12        except:
    13            img_decode=temp
    14            pass
    15        cv2.imshow('SERVER', img_decode)
    16        cv2.setMouseCallback("SERVER", mouse_click)
    17        try:
    18            f=open("1.txt")
    19            txt=f.read()
    20            f.close()
    21            reply=txt
    22            print(reply)
    23            clientsocket.send(reply.encode('utf-8'))
    24            os.remove("1.txt")
    25        except:
    26            pass
    27        if cv2.waitKey(1) & 0xFF == ord('q'):
    28            break
    

    (4)主函数,用来建立连接和数据接收等功能。

     1def main():
     2    socket_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     3    host='服务器的本地ip'
     4    #设置被监听的端口号,小于1024的端口号不能使用
     5    port=设置的端口
     6    socket_server.bind((host,port))
     7    #设置最大监听数,也就是最多可以同时响应几个客户端请求,一般配合多线程使用
     8    socket_server.listen(5)
     9    #等待客户端连接,一旦有了连接就立刻向下执行,否则等待
    10    #accept()函数会返回一个元组,第一个元素是客户端socket对象,第二个元素是客户端地址(ip地址+端口号)
    11    clientsocket,addr=socket_server.accept()
    12    # 有了客户端连接后之后才能执行以下代码,我们先向客户端发送连接成功消息
    13    clientsocket.send('连接成功'.encode('utf-8'))
    14    # 和客户端一样开启一个线程接受客户端的信息
    15    t=threading.Thread(target=recv_msg,args=(clientsocket,))
    16    t.start()
    

    02

    远程控制GUI窗口

    远控桌面GUI主要是为了美观而用,需要大家根据远程代码进行集合修改。当然单独使用上述代码已经可以实现功能了,只是不够美观。由于考虑到此处代码量较大,且不是重点,故粗略讲解(1)导入相关库:

     1from PyQt5.QtWidgets import *
     2from PyQt5.QtCore import *
     3from PyQt5.QtGui import QPalette, QBrush, QPixmap
     4import os
     5import socket
     6import threading
     7import cv2
     8import numpy as np
     9from PIL import ImageGrab
    10from pynput.mouse import Button,Controller
    11import time
    

    (2)建立鼠标控制函数和点击函数

    1m = Controller()
    2def mouse_click(event, x, y, flags, para):
    3    if event == cv2.EVENT_LBUTTONDOWN:  # 左边鼠标点击
    4        print( x, y)
    5        m.position = (x, y)
    6        time.sleep(0.1)
    7        m.click(Button.left, 1)
    

    (3)GUI界面初始化,由于我们需要把实时的视频显示在窗口上,故也需要使用到opencv。

     1def __init__(self, parent=None):
     2    super(Ui_MainWindow, self).__init__(parent)
     3    # self.face_recong = face.Recognition()
     4    self.timer_camera = QtCore.QTimer()
     5    self.cap = cv2.VideoCapture()
     6    self.CAM_NUM = 0
     7    self.set_ui()
     8    self.slot_init()
     9    self.__flag_work = 0
    10    self.x = 0
    11    self.count = 0
    

    (4)设置窗口大小和控件位置等信息。创建布局和设置名称

     1def set_ui(self):
     2    self.__layout_main = QtWidgets.QHBoxLayout()
     3    self.__layout_fun_button = QtWidgets.QVBoxLayout()
     4    self.__layout_data_show = QtWidgets.QVBoxLayout()
     5    self.button_open_camera = QtWidgets.QPushButton(u'远程桌面')
     6    self.button_close = QtWidgets.QPushButton(u'退出')
     7    # Button 的颜色修改
     8    button_color = [self.button_open_camera, self.button_close]
     9    for i in range(2):
    10        button_color[i].setStyleSheet("QPushButton{color:black}"
    11                                      "QPushButton:hover{color:red}"
    12                                      "QPushButton{background-color:rgb(78,255,255)}"
    13                                      "QPushButton{border:2px}"
    14                                      "QPushButton{border-radius:10px}"
    15                                      "QPushButton{padding:2px 4px}")
    16    self.button_open_camera.setMinimumHeight(50)
    17    self.button_close.setMinimumHeight(50)
    18    # move()方法移动窗口在屏幕上的位置到x = 300,y = 300坐标。
    19    self.move(500, 500)
    20    # 信息显示
    21    self.label_show_camera = QtWidgets.QLabel()
    22    self.label_move = QtWidgets.QLabel()
    23    self.label_move.setFixedSize(100, 100)
    24    self.label_show_camera.setFixedSize(1530,863)
    25    self.label_show_camera.setAutoFillBackground(False)
    26    self.__layout_fun_button.addWidget(self.button_open_camera)
    27    self.__layout_fun_button.addWidget(self.button_close)
    28    self.__layout_fun_button.addWidget(self.label_move)
    29    self.__layout_main.addLayout(self.__layout_fun_button)
    30    self.__layout_main.addWidget(self.label_show_camera)
    31    self.setLayout(self.__layout_main)
    32    self.label_move.raise_()
    33    self.setWindowTitle(u'远控桌面GUI')
    34    '''
    35    # 设置背景图片
    36    palette1 = QPalette()
    37    palette1.setBrush(self.backgroundRole(), QBrush(QPixmap('background.jpg')))
    38    self.setPalette(palette1)
    39    '''
    

    (5)获取鼠标点击时的坐标:

     1def mousePressEvent(self,event):
     2    if event.buttons() & QtCore.Qt.LeftButton:
     3        x = event.x()-120
     4        y = event.y()-10
     5        text = "x: {0},y: {1}".format(x,y)
     6        if x>=0 and y>=0:
     7            m.position = (x, y)
     8            time.sleep(0.1)
     9            m.click(Button.left, 1)
    10        print(text)
    

    (6)按钮绑定所设置的函数:

    1def slot_init(self):
    2    self.button_open_camera.clicked.connect(self.button_open_camera_click)
    3    self.timer_camera.timeout.connect(self.show_camera)
    4    self.button_close.clicked.connect(self.close)
    

    (7)显示桌面功能函数,并设置点击时修改名称,可以随时关闭桌面

    1def button_open_camera_click(self):
    2    if self.timer_camera.isActive() == False:
    3        self.timer_camera.start(30)
    4        self.button_open_camera.setText(u'关闭')
    5    else:
    6        self.timer_camera.stop()
    7        self.cap.release()
    8        self.label_show_camera.clear()
    9        self.button_open_camera.setText(u'远程桌面')
    

    (8)显示桌面函数和退出程序函数

     1def show_camera(self):
     2    im = ImageGrab.grab()
     3    imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)  # 转为opencv的BGR格式
     4    #imm = cv2.resize(imm, (1535, 863))
     5    self.image = imm
     6    # face = self.face_detect.align(self.image)
     7    # if face:
     8    #     pass
     9    show =cv2.resize(self.image, (1536,863))
    10    show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)
    11    print(show.shape[1], show.shape[0])
    12    # show.shape[1] = 640, show.shape[0] = 480
    13    showImage = QtGui.QImage(show.data, show.shape[1], show.shape[0], QtGui.QImage.Format_RGB888)
    14    self.label_show_camera.setPixmap(QtGui.QPixmap.fromImage(showImage))
    15    #cv2.setMouseCallback(showImage, mouse_click)
    16    # self.x += 1
    17    # self.label_move.move(self.x,100)
    18    # if self.x ==320:
    19    #     self.label_show_camera.raise_()
    20def closeEvent(self, event):
    21    ok = QtWidgets.QPushButton()
    22    cacel = QtWidgets.QPushButton()
    23    msg = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Warning, u"关闭", u"是否关闭!")
    24    msg.addButton(ok, QtWidgets.QMessageBox.ActionRole)
    25    msg.addButton(cacel, QtWidgets.QMessageBox.RejectRole)
    26    ok.setText(u'确定')
    27    cacel.setText(u'取消')
    28    # msg.setDetailedText('sdfsdff')
    29    if msg.exec_() == QtWidgets.QMessageBox.RejectRole:
    30        event.ignore()
    31    else:
    32        #             self.socket_client.send_command(self.socket_client.current_user_command)
    33        if self.cap.isOpened():
    34            self.cap.release()
    35        if self.timer_camera.isActive():
    36            self.timer_camera.stop()
    37        event.accept()

    感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

    ① 2000多本Python电子书(主流和经典的书籍应该都有了)

    ② Python标准库资料(最全中文版)

    ③ 项目源码(四五十个有趣且经典的练手项目及源码)

    ④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)


     ⑤ Python学习路线图(告别不入流的学习)

    在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)

    可以自助拿走,群号913569736(备注“csdn000”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
     

    展开全文
  • 很多时候,我们都有远程控制电脑的需求。比如正在下载某样东西,需要让电脑在下载完后关机。或者你需要监控一个程序的运行状况等。 今天我们就来用Python实现一个远程监控并控制电脑的小程序。 二、实现原理 听...

    大自然用数百亿年创造出我们现实世界,而程序员用几百年创造出一个完全不同的虚拟世界。我们用键盘敲出一砖一瓦,用大脑构建一切。人们把1000视为权威,我们反其道行之,捍卫1024的地位。我们不是键盘侠,我们只是平凡世界中不凡的缔造者。

    每个人都想要改变世界,却没人想过要改变自己

    一、前言

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

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

    二、实现原理

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

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

    2. 用手机给电脑发送邮件

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

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

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

    我们可以预设一个指令,当读取到邮件内容为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)
    

    其中:

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

     

     

    感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

    ① 2000多本Python电子书(主流和经典的书籍应该都有了)

    ② Python标准库资料(最全中文版)

    ③ 项目源码(四五十个有趣且经典的练手项目及源码)

    ④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)


     ⑤ Python学习路线图(告别不入流的学习)

    在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)

    可以自助拿走,群号913569736(备注“csdn000”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
     
     

    展开全文
  • python实现远程控制

    千次阅读 2019-08-13 14:33:35
    python实现远程控制 准备 需要调用socket库,os库 概念原理 要实现远程控制就是要获取对方电脑的一个“shell” 它是操作系统中用于人机交互的部分,windows最常见的shell就是cmd。 Shell从控制方向上说分如下两类: 1...
  • 在adb文件目录下运行cmd,调用相应的adb指令即可对手机模拟操作3、在python或其他语言java中,也是通过调用cmd shell,运行相应的adb命令实现自动操作的。主要命令:以通过如下ADB命令实现PC对Android手机的模拟输入...
  • python控制手机

    千次阅读 2021-11-28 13:21:55
    需要设备安装ATX编写Python代码进行控制手机4.ui的一些操作命令如下:1.链接设备2.打开调试开关3.获取设备信息4.获取应用信息:5.启动应用:6.停止应用:7.推拉文件:8.关键事件:9.解锁屏幕10.手势与设备的交互:11....
  • 今天我们就来用Python实现一个远程监控并控制电脑的小程序。 二、实现原理 听起来远程控制电脑好像很高级的样子,但是实现起来其实非常简单。实现原理如下: 运行程序,让程序不停地读取邮件 用手机给电脑发送...
  • 设计以STM32F405为主控芯片,通过W5500模块以MQTT协议方式发布到MQTT服务器,最终在手机客户端实现数据采集和控制。 主要功能: 1.STM32F405为主控芯片,它通过传感器采集环境数据,比如温度,湿度,光照度,大气压强...
  • 第一个步骤,申请一个邮箱,使这个邮箱与你的手机号码绑定,然后你在这个邮箱中设定如果有新的邮件就发短信通知.这样开机时往这个邮箱发个mail,我手机就会收到短信通知了.第二个步骤就是通过python 脚本,定时去检查163....
  • 今天我们就来用Python实现一个远程监控并控制电脑的小程序。 二、实现原理 听起来远程控制电脑好像很高级的样子,但是实现起来其实非常简单。实现原理如下: 运行程序,让程序不停地读取邮件 用手机给电脑...
  • 最近经常需要简单地远程控制一下电脑,比如远程查看一下电脑上模型训练的情况,模型训练完之后远程关闭电脑等等,于是就想着利用python来简单地实现一下这些功能,直接利用邮件远程控制自己电脑。 让我们愉快地开始...
  • 实现废旧安卓手机利用,物理打卡,使用python+adb实现手机钉钉打卡的功能,跳过周末。
  • 久违的来记录一下最近学习的通过python代码来实现操控手机,这里是利用adb,安卓调试桥来实现的,当然也可以利用appium来实现,appium是一种自动化测试相关的,也能实现操作手机。 Android 调试桥 (adb) 是一种功能...
  • 不知道大家有没有这样一个烦恼,“自己的电脑总是被别人使用,又不好意思设置密码”,所以利用python设计了一个程序来实现自由管控。功能虽然简单,但大家可以通过其思路来实现更多的功能。大致功能主要是两个部分,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,805
精华内容 3,522
热门标签
关键字:

python实现远程控制手机