Python доля экрана - PullRequest
       105

Python доля экрана

0 голосов
/ 22 апреля 2020

Привет, я пытаюсь создать приложение в python 3 для совместного использования экрана, и я посмотрел другие коды из inte rnet (некоторые из них из StackOverFlow), и все они просто быстро открывают скриншоты моего экрана без захватывая их на одном экране, поэтому невозможно работать с

. Я не могу работать с общим экраном, который выдает 100 вкладок скриншота каждые несколько секунд (я не думаю, что так оно и должно работать)

Я хотел бы захватить их на один экран, чтобы я мог работать с ним, а также чтобы он не делал мой экран настолько грязным с сотней открытых вкладок снимков экрана, что я не могу обработать

Я бы с удовольствием помощь или технический совет

вот код, который я нашел из стека через поток:

Client.py

from socket import socket
from zlib import decompress

import pygame

WIDTH = 1900
HEIGHT = 1000


def recvall(conn, length):
    """ Retreive all pixels. """

    buf = b''
    while len(buf) < length:
        data = conn.recv(length - len(buf))
        if not data:
            return data
        buf += data
    return buf


def main(host='127.0.0.1', port=5001):
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    clock = pygame.time.Clock()
    watching = True

    sock = socket()
    sock.connect((host, port))
    try:
        while watching:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    watching = False
                    break

            # Retreive the size of the pixels length, the pixels length and pixels
            size_len = int.from_bytes(sock.recv(1), byteorder='big')
            size = int.from_bytes(sock.recv(size_len), byteorder='big')
            pixels = decompress(recvall(sock, size))

            # Create the Surface from raw pixels
            img = pygame.image.fromstring(pixels, (WIDTH, HEIGHT), 'RGB')

            # Display the picture
            screen.blit(img, (0, 0))
            pygame.display.flip()
            clock.tick(60)
    finally:
        sock.close()


if __name__ == '__main__':
    main()

Сервер. py

from socket import socket
from threading import Thread
from zlib import compress

from mss import mss


WIDTH = 1900
HEIGHT = 1000


def retreive_screenshot(conn):
    with mss() as sct:
        # The region to capture
        rect = {'top': 0, 'left': 0, 'width': WIDTH, 'height': HEIGHT}

        while 'recording':
            # Capture the screen
            img = sct.grab(rect)
            # Tweak the compression level here (0-9)
            pixels = compress(img.rgb, 6)

            # Send the size of the pixels length
            size = len(pixels)
            size_len = (size.bit_length() + 7) // 8
            conn.send(bytes([size_len]))

            # Send the actual pixels length
            size_bytes = size.to_bytes(size_len, 'big')
            conn.send(size_bytes)

            # Send pixels
            conn.sendall(pixels)


def main():
    sock = socket()
    sock.bind(('0.0.0.0', 5001))
    try:
        sock.listen(5)
        print('Server started.')

        while 'connected':
            conn, addr = sock.accept()
            print('Client connected IP:', addr)
            thread = Thread(target=retreive_screenshot, args=(conn,))
            thread.start()
    finally:
        sock.close()


if __name__ == '__main__':
    main()

ps, возможно, он открывает так много вкладок, потому что я использую его на моем компьютере - и он должен работать между двумя компьютерами. я не знаю, хотел бы получить помощь

Ссылка на страницу исходного кода: совместное использование экрана в python

...