python实用【大技巧】之Python手把手实现远程控制桌面_python远程控制电脑

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

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

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
m.click(Button.left, 1)
10 print(text)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-P9NvJjsi-1713354408527)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
统计套利是一种利用不同市场或不同证券之间的价格差异进行交易的策略。在实践中,统计套利经常涉及到多个证券之间的关系,并且需要进行复杂的计算和统计分析。Python是一种强大的编程语言,可以用于实现这种策略。 以下是一个简单的使用Python实现统计套利的步骤: 1. 选择需要进行统计套利的证券。这些证券通常具有相关性,例如同一行业的股票、跨国公司的股票等。 2. 收集所选证券的历史价格数据。这可以通过从金融数据提供商如雅虎财经或谷歌财经获取数据,或者使用Python库(如pandas-datareader)来获取数据。 3. 计算每个证券的收益率。根据所选证券的历史价格数据,计算每个证券的收益率。这可以通过计算每个证券的价格变化率来实现。 4. 计算每对证券之间的协方差。使用pandas库中的corr()函数计算每对证券之间的协方差。这可以帮助确定证券之间的相关性。 5. 构建线性回归模型。使用StatsModels库中的OLS()函数构建线性回归模型。该模型可以帮助确定每个证券的权重。 6. 计算每个证券的标准化收益率。根据每个证券的收益率和其权重,计算每个证券的标准化收益率。 7. 计算套利指数。根据每个证券的标准化收益率,计算套利指数。套利指数表示所有选定证券的加权平均值。 8. 制定交易策略。根据套利指数和选定证券的价格变化,制定交易策略。 虽然以上步骤是一个简单的指南,但实际实现统计套利需要更多的计算和分析。但是,使用Python可以让这个过程更加高效和自动化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值