首页 > 编程语言 >Python连接VNC

Python连接VNC

时间:2024-11-12 18:09:28浏览次数:1  
标签:VNC str Python self client key image 连接 def

# -*- coding: utf-8 -*-
"""
安装命令:pip install opencv-python vncdotool -i https://mirrors.aliyun.com/pypi/simple

"""
import ctypes
import time
from logging import shutdown
import random

import cv2, numpy as np

from vncdotool import api
from vncdotool.client import KEYMAP


class VNC:
    button_left = 1
    button_mid = 2
    button_right = 3

    def __init__(self, ip, prot,password=None):
        self.ip = ip + "::" + prot
        self.cmd = f"vncdo -s {self.ip} "
        self.client = api.connect(self.ip,password)
        self.key_map = KEYMAP
        self.image_size = 1024*768  # 1024*768分辨率大小的
        self.image_buffer = (ctypes.c_ubyte * self.image_size)()

    def __del__(self):
        self.stop()

    def stop(self):
        self.client.disconnect()

    # 截图,可以保存到本地,也可以直接获取cv图像对象
    def capture(self, path=None):
        if path:
            self.client.captureScreen(path)
        else:  # 不写入图像,直接转cv图像bgr格式
            self.flush_screen(1)
            return cv2.cvtColor(np.asarray(self.client.screen), cv2.COLOR_RGB2BGR)

    def capture_to_addr(self):
        self.flush_screen(1)
        image_bytes = np.asarray(self.client.screen).tobytes()
        ctypes.memmove(self.image_buffer, image_bytes, self.image_size)
        return ctypes.addressof(self.image_buffer), self.image_size

    # 移动鼠标
    def move(self, x, y):
        self.client.mouseMove(x, y)

    # 点击鼠标按钮,123分别对应左中右键
    def click(self, button=1, delay=0.05):
        self.client.mouseDown(button)
        time.sleep(delay)
        self.client.mouseUp(button)
        # self.flush_screen()

    # 移动并点击鼠标左键
    def left_click(self, x, y):
        self.move(x, y)
        self.click()
        self.flush_screen()

    # 双击鼠标左键
    def double_left_click(self, x, y):
        self.move(x, y)
        self.click()
        time.sleep(0.1)
        self.click()

    # 点击鼠标右键
    def right_click(self, x, y):
        self.move(x, y)
        self.click(3)

    # 拖动
    def drag(self, x, y, step=1):
        return self.client.mouseDrag(x, y, step)

    # 按键一次
    def key_press(self, key_str):
        # key_str可以参考 KEYMAP
        self.client.keyPress(key_str)
        self.flush_screen()

    # 刷新屏幕
    def flush_screen(self, incremental=1):
        return self.client.refreshScreen(incremental)  # 屏幕更改时才刷新,节省宽带

    def key_down(self, key_str):
        return self.client.keyDown(key_str)

    def key_up(self, key_str):
        return self.client.keyUp(key_str)

    # 组合键
    def hot_key(self, key_list):
        for key_str in key_list:
            self.key_down(key_str)
            time.sleep(0.05)
        for key_str in key_list[::-1]:
            self.key_down(key_str)
            time.sleep(0.05)


if __name__ == '__main__':
    v = VNC("176.232.102.57", "5900","Qwert12345")
    # # 键盘测试
    # v.key_press("a")
    # # 鼠标测试
    # v.move(200, 500)
    # v.click(1)
    # 截图测试
    FPS = 0
    while True:
        s = time.time()
        new_image = v.capture(path=None)  # 获取新图像
        print(time.time()-s)
        FPS = 1 / (time.time() - s)
        # 绘制帧率
        cv2.putText(new_image, str(int(FPS)), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
        cv2.imshow("img", new_image)
        cv2.waitKey(1)
        v.move(random.randint(100,800),random.randint(100,800))
    api.shutdown() # 关闭事件循环

 

标签:VNC,str,Python,self,client,key,image,连接,def
From: https://www.cnblogs.com/zwnsyw/p/18542395

相关文章

  • 【PAT_Python解】1125 子串与子列
    原题链接:PTA|程序设计类实验辅助教学平台Tips:以下Python代码仅个人理解,非最优算法,仅供参考!多学习其他大佬的AC代码!测试点5超时:defmin_window_substring(s,p):len1=len(s)len2=len(p)mixn=0min_length=len1+1#设置为一个较大的值......
  • debian11 使用python3 启动http文件服务器和ftp服务器脚本
    http文件服务器start_http_server.sh#!/bin/bashport=$1host=0.0.0.0functionUsage(){echo-e"Usage:${0}[port]"exit0}if[[${port}==""]];thenUsagefi#检查端口号是否被占用check_port=`netstat-ant|grepLISTEN|grep${port}......
  • Python科学计算的利器:Scipy库深度解析
    Python科学计算的利器:SciPy库深度解析在数据科学、工程计算和数学建模领域,Python的SciPy库是不可或缺的强大工具。SciPy以NumPy为基础,提供了丰富的函数和算法,用于数值积分、优化、线性代数、信号处理等科学计算任务。本文将详细介绍SciPy库的核心模块和功能,帮助你深入理解......
  • Python的Web请求:requests库入门与应用
    Python的Web请求:requests库入门与应用在Python中,进行网络请求和获取数据是许多应用程序的基础功能。requests库是Python中最流行的HTTP库之一,它以简洁、易用、功能强大的特点著称,可以帮助开发者高效地进行各种类型的Web请求。本文将带你快速上手requests库,并展示如何在实际......
  • 基于Python实现的django农业垃圾分类管理系统的设计与实现
    《[含文档+PPT+源码等]精品基于Python实现的django农业垃圾分类管理系统的设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!软件开发环境及开发工具:开发语言:py......
  • 大数据项目-基于python实现的人才招聘数据分析与可视化平台
    《[含文档+PPT+源码等]精品基于python实现的人才招聘数据分析与可视化平台》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!数据库管理工具:phpstudy/Navicat或者phpstudy/sqlyog后台管......
  • 详解连接 MySQL8.4 出现 Client does not support authentication protocol requested
    文章目录项目场景问题描述原因分析解决方案方案一(不推荐)方案二(推荐)总结项目场景在开发过程中,我们在Node.js项目中使用MySQL数据库,并且通过typeorm和mysql库进行数据库连接。然而,在项目启动时,遇到了数据库连接失败的问题,导致项目无法正常运行。问题描述......
  • 使用python爬取百度热搜
    文章目录前言一、requests是什么?二、使用步骤1.引入库2.获取页面数据3.使用xpath解析页面,获取词条列表信息4.获取指定元素信息,添加到dataframe中5.保存数据到指定的文件或数据库总结前言本文介绍使用request获取百度热搜的简单功能一、requests是什么?Pythonreq......
  • Python那些事儿 - 注释与数据类型
    第二回初出茅庐前言Python的横空出世,很快吸引了大批的追捧者,大家都加入了对它的了解学习和使用当中。有人编制教学书籍,有人开培训课堂,如今市面上的书籍和培训机构数不胜数。但是对于学习者来说,大家学习Python的开始都是一样的,那就是:#1、代码区输入print('hello,world')#......
  • 用 Python 开发卷积神经网络全解析
    一、准备工作安装必要的库在Python中开发卷积神经网络,我们通常会用到几个非常重要的库,比如TensorFlow和Keras。TensorFlow是一个功能强大的开源机器学习框架,而Keras是构建在TensorFlow之上的高级神经网络API,它让模型的搭建和训练变得更加简洁直观。可以使用以......