0 200 2023-06-23 02:36:13
收藏
import argparse
import time
import cv2
import keyboard
import mss
import numpy as np
import win32com.client
import win32con
import win32gui
class ScreenCapture:
"""
parameters
----------
screen_frame : Tuple[int, int]
屏幕宽高,分别为x,y
region : Tuple[float, float]
实际截图范围,分别为x,y,(1.0, 1.0)表示全屏检测,越低检测范围越小(始终保持屏幕中心为中心)
window_name : str
显示窗口名
exit_key : int
结束窗口的退出键值,为键盘各键对应的ASCII码值,默认是ESC键
"""
def __init__(self, screen_frame=(1920, 1080), region=(0.5, 0.5), window_name='test', exit_key=0x1B):
self.parser = argparse.ArgumentParser()
self.parser.add_argument('--region', type=tuple, default=region,
help='截图范围;分别为x,y,(1.0, 1.0)表示全屏检测,越低检测范围越小(始终保持屏幕中心为中心)')
self.parser_args = self.parser.parse_args()
self.cap = mss.mss(mon=-1, optimize=True) # 实例化mss,并使用高效模式
self.screen_width = screen_frame[0] # 屏幕的宽
self.screen_height = screen_frame[1] # 屏幕的高
self.mouse_x, self.mouse_y = self.screen_width // 2, self.screen_height // 2 # 屏幕中心点坐标
# 截图区域
self.GAME_WIDTH, self.GAME_HEIGHT = int(self.screen_width * self.parser_args.region[0]), int(
self.screen_height * self.parser_args.region[1]) # 宽高
self.GAME_LEFT, self.GAME_TOP = int(0 + self.screen_width // 2 * (1. - self.parser_args.region[0])), int(
0 + 1080 // 2 * (1. - self.parser_args.region[1])) # 原点
self.RESZIE_WIN_WIDTH, self.RESIZE_WIN_HEIGHT = self.screen_width // 4, self.screen_height // 4 # 显示窗口大小
self.mointor = {
'left': self.GAME_LEFT,
'top': self.GAME_TOP,
'width': self.GAME_WIDTH,
'height': self.GAME_HEIGHT
}
self.window_name = window_name
self.Exit_key = exit_key
self.img = None
def grab_screen_mss(self, monitor):
# cap.grab截取图片,np.array将图片转为数组,cvtColor将BRGA转为BRG,去掉了透明通道
return cv2.cvtColor(np.array(self.cap.grab(monitor)), cv2.COLOR_BGRA2BGR)
def update_img(self, img):
self.img = img
def get_img(self):
return self.img
def run(self):
SetForegroundWindow_f = 0 # 判断是否需要置顶窗口
while True:
# 判断是否按下 ctrl+U 窗口始终置顶
if keyboard.is_pressed('ctrl+U'):
while keyboard.is_pressed('ctrl+U'):
continue
if SetForegroundWindow_f == 0:
SetForegroundWindow_f = 1
time.sleep(1)
continue
else:
SetForegroundWindow_f = 0
if self.img is None:
img = self.grab_screen_mss(self.mointor)
cv2.namedWindow(self.window_name, cv2.WINDOW_NORMAL) # cv2.WINDOW_NORMAL 根据窗口大小设置图片大小
cv2.resizeWindow(self.window_name, self.RESZIE_WIN_WIDTH, self.RESIZE_WIN_HEIGHT)
cv2.imshow(self.window_name, img)
if SetForegroundWindow_f == 1:
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
win32gui.SetForegroundWindow(win32gui.FindWindow(None, self.window_name))
win32gui.ShowWindow(win32gui.FindWindow(None, self.window_name), win32con.SW_SHOW)
if cv2.waitKey(1) & 0XFF == self.Exit_key: # 默认:ESC
cv2.destroyAllWindows()
exit("结束")
sc = ScreenCapture()
sc.run()
screen_frame : Tuple[int, int]
屏幕宽高,分别为x,y
region : Tuple[float, float]
实际截图范围,分别为x,y,(1.0, 1.0)表示全屏检测,越低检测范围越小(始终保持屏幕中心为中心)
window_name : str
显示窗口名
exit_key : int
结束窗口的退出键值,为键盘各键对应的ASCII码值,默认是ESC键
其他
键盘各键对应的ASCII码值 (0x指16进制,delete键的ascii码值是0x2e,也即十进制的46)
0x1 鼠标左键
0x2 鼠标右键
0x3 CANCEL 键
0x4 鼠标中键
0x8 BACKSPACE 键
0x9 TAB 键
0xC CLEAR 键
0xD ENTER 键
0x10 SHIFT 键
0x11 CTRL 键
0x12 MENU 键
0x13 PAUSE 键
0x14 CAPS LOCK 键
0x1B ESC 键
0x20 SPACEBAR 键
0x21 PAGE UP 键
0x22 PAGE DOWN 键
0x23 END 键
0x24 HOME 键
0x25 LEFT ARROW 键
0x26 UP ARROW 键
0x27 RIGHT ARROW 键
0x28 DOWN ARROW 键
0x29 SELECT 键
0x2A PRINT SCREEN 键
0x2B EXECUTE 键
0x2C SNAPSHOT 键
0x2D INSERT 键
0x2E DELETE 键
0x2F HELP 键
0x90 NUM LOCK 键
A 至 Z 键与 A – Z 字母的 ASCII 码相同:
值 描述
65 A 键
66 B 键
67 C 键
68 D 键
69 E 键
70 F 键
71 G 键
72 H 键
73 I 键
74 J 键
75 K 键
76 L 键
77 M 键
78 N 键
79 O 键
80 P 键
81 Q 键
82 R 键
83 S 键
84 T 键
85 U 键
86 V 键
87 W 键
88 X 键
89 Y 键
90 Z 键
0 至 9 键与数字 0 – 9 的 ASCII 码相同:
值 描述
48 0 键
49 1 键
50 2 键
51 3 键
52 4 键
53 5 键
54 6 键
55 7 键
56 8 键
57 9 键
下列常数代表数字键盘上的键:
值 描述
0x60 0 键
0x61 1 键
0x62 2 键
0x63 3 键
0x64 4 键
0x65 5 键
0x66 6 键
0x67 7 键
0x68 8 键
0x69 9 键
0x6A MULTIPLICATION SIGN (*) 键
0x6B PLUS SIGN (+) 键
0x6C ENTER 键
0x6D MINUS SIGN (–) 键
0x6E DECIMAL POINT (.) 键
0x6F DIVISION SIGN (/) 键
下列常数代表功能键:
值 描述
0x70 F1 键
0x71 F2 键
0x72 F3 键
0x73 F4 键
0x74 F5 键
0x75 F6 键
0x76 F7 键
0x77 F8 键
0x78 F9 键
0x79 F10 键
0x7A F11 键
0x7B F12 键
0x7C F13 键
0x7D F14 键
0x7E F15 键
0x7F F16 键
本文地址:https://xzo.com.cn/develop/python/1160.html
如果您认可我们的分享,有意与我们合作开展帝国cms网站建设与开发业务或插件定制,请联系右侧在线客服。我们能给您的,就是高质量的模板与售后。
标注了信息来源为下载鸥的文章皆为原创,如果是转载的优质文章,我们也都标注了出处。如果您喜欢我们的文章,请按照下载鸥所标注的文章出处进行标注,谢谢您的配合。
Python免费、开源、简单,且含有海量的库。其功能也十分强大,不仅可以做网站、做爬虫、还可以做大数据、做人脸识别,等等等等。如果是新手入门,我们建议是首选Python。
国内知名度比较高的Python中文分词有哈工大LTP、中科院计算所NLPIR、清华大...
结巴分词支持3种模式:全模式、精确模式和搜索引擎模式,不同的模式效果会有差...
但凡对电脑知识了解多一点的朋友可能就听说过进程,而如果对蜘蛛爬虫有了解,那...
python爬虫爬取百度图片是很多人python爬虫入门后一个重要的练手项目。一方...
爬虫软件很多,支持爬虫功能的语言也很多,而用python做爬虫,辅以包罗万象的pyth...
通过本插件,可以实现帝国cms网站对接百度云api实现图像无损放大的功能。经过...
一直没看到好用的帝国cms在线考试插件,所以自己开发了一款。在线考试插件用...
帝国CMS自带的搜索功能虽然强大,但也有很强的局限性 -- 必须关键词完全匹配...
通过本插件,可以实现帝国cms网站对接百度云api实现图像清晰度增强的功能。经...
使用帝国cms的企业用户、新闻资讯类站点的用户很多,此类站点很多时候需要有...
用户体验是我们的需求,百度蜘蛛的认可更是我们的需求。毕竟,没有收录排名,何来...
帝国cms有自带的给关键词添加内链功能,但需要手动添加关键词,容易出现疏漏和...
帝国cms 对接纳米数据(www.nami.com)接口,本接口主要接收、整理足球比赛实时数...