搞了好久,东拼西凑的搞定python在win截图,并在截图区域画框

python调用win32接口进行截图的示例 python的版本及依赖的库的安装 #版本python 3.7.1 pip install pywin32==224 pip install numpy==1.15.3 pip install opencv-python==3.4.2.16 pip install opencv-contrib-python==3.4.2.16 pip install Pillow-PIL==0.1.dev0 对后台窗口截图 #对后台窗口截图 import win32gui, win32ui, win32con from ctypes import windll from PIL import Image 立即下载

对api不熟,网上python实用代码也不多,截图虽然有直接的代码,但是描述不全。连猜带蒙终于搞定了用pywin32对win屏幕截图,并在所需要截图的位置画框。

作为纪念,留个爪子,分享一下喜悦。如果有大神经过,觉得代码写的不好,不妨帮忙改改。

def winsst(argw=0,argh=0,argtopleft=(0,0)):
    '''截图,输出Bitmapsbits的列表
    argw=0表示全宽,argh=0表示全高
    '''
    hwnd = 0  # 窗口的编号,0号表示当前活跃窗口
    hwndDC = win32gui.GetWindowDC(hwnd) # 根据窗口句柄获取窗口的设备上下文DC(Divice Context)
    mfcDC = win32ui.CreateDCFromHandle(hwndDC)  # 根据窗口的DC获取mfcDC
    saveDC = mfcDC.CreateCompatibleDC() # mfcDC创建可兼容的DC
    saveBitMap = win32ui.CreateBitmap() # 创建bigmap准备保存图片
    MoniterDev = win32api.EnumDisplayMonitors(None, None)   # 获取监控器信息
    # 判断是否设置截图区域
    w = MoniterDev[0][2][2] if argw==0 else argw
    h = MoniterDev[0][2][3] if argh==0 else argh
    saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)  # 为bitmap开辟空间
    saveDC.SelectObject(saveBitMap) # 高度saveDC,将截图保存到saveBitmap中
    # 截取从左上角(0,0)或者 tmptl 长宽为(w,h)的图片
    tx=0 if argtopleft[0] <=0 else argtopleft[0]
    ty=0 if argtopleft[1]<=0 else argtopleft[1]
    tmptl=(tx,ty)
    saveDC.BitBlt((0,0), (w, h), mfcDC,tmptl, win32con.SRCCOPY) # 目标矩形顶点(0,0)长宽(w,h),源设备mfcDC,源矩形顶点tmptl
    rtns = saveBitMap.GetBitmapBits()
    # # 绘制辅助框 暂时未解决透明问题
    hPen = win32gui.CreatePen(win32con.PS_SOLID,1,win32api.RGB(255,0,255)) # 定义框颜色
    win32gui.SelectObject(hwndDC,hPen)
    hbrush = win32gui.GetStockObject(win32con.NULL_BRUSH) # 定义透明画刷,这个很重要!!
    prebrush=win32gui.SelectObject(hwndDC,hbrush)
    win32gui.Rectangle(hwndDC,tx-1,ty-1,tx+w+2,ty+h+2) # 左上到右下的坐标
    win32gui.SelectObject(hwndDC,prebrush)
    # # 回收资源
    mfcDC.DeleteDC()
    saveDC.DeleteDC()
    win32gui.DeleteObject(hPen)
    win32gui.DeleteObject(hbrush)
    win32gui.DeleteObject(prebrush)
    win32gui.ReleaseDC(hwnd,hwndDC)
    return rtns

上面如果需要返回bmp图片,直接用 

rtns = saveBitMap.SaveBitmapFile(saveDC, filename)

因为自己要写基于字库的简单ocr所以直接返回BitmapBits了。注意:对同一个文件存储,不能太快(filename名不改,循环运行函数),会出错的。

一开始,看的一个C++写的范例改造:

    # # 绘制辅助框 暂时未解决透明问题
    memDC = win32gui.CreateCompatibleDC(0) # 创建辅助绘图设备
    win32gui.SetBkColor(memDC,win32con.TRANSPARENT)
    hBitmap = win32gui.CreateCompatibleBitmap(memDC,w+2,h+2) # 创建掩码位图(画布)
    win32gui.SelectObject(memDC,hBitmap) # 画布贴在绘图设备上
    hPen = win32gui.CreatePen(win32con.PS_SOLID,1,win32api.RGB(255,0,255))
    win32gui.SelectObject(memDC,hPen)
    hbrush = win32gui.GetStockObject(win32con.NULL_BRUSH)
    prebrush=win32gui.SelectObject(memDC,hbrush)
    win32gui.Rectangle(memDC,tx-1,ty-1,tx+w+2,ty+h+2) # 画布上画矩形    
    win32gui.SelectObject(hwndDC,prebrush)
    win32gui.BitBlt(hwndDC,tx-1,ty-1,w+2,h+2,memDC,0,0,win32con.SRCCOPY)

但是把memDC复制到屏幕上,就没法搞定矩形中间透明了。不知道有没有Win32 API大神能解决解决?

让Claude连续写代码24小时会发生什么?揭秘长时运行”架构背后的工程逻辑与未来 AI长时运行实验揭示软件开发新范式 Claude Opus通过Harness框架24小时独立开发全栈应用的成功实验,展示了AI从辅助工具向异步协作者的进化。实验采用"上下文轮转"机制解决记忆管理难题,将任务拆解为微周期并通过文件系统同步进度。核心突破在于:1)TDD成为AI自治基石,200+测试用例确保开发不偏航;2)文件取代对话成为AI间高效沟通介质;3)开发者角色重构为需求定义和框架设计者。该实验证明,通过严谨的架构约束和验收标准,AI可完成复杂长周期任务,预示着软件开发将从手工作坊 阅读详情

相关推荐

多层感知机 Multilayer Perceptron | MLP

本文主要简单介绍了多层感知机的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型的参数等。

JasonH2021的博客 3万+

python 在屏幕上绘制方框

而另一种是绘制指定的像素点位置,然后刷新部分区域。一种是创建矩形绘制器,然后刷新整个屏幕。机翻的大佬给出了两种方案。

qq_39103891的博客 2545

figma MCP + cursor如何将设计稿生成前端页面

Figma MCP配置与代码生成指南 本文详细介绍了如何在Cursor中配置Figma MCP(多上下文处理器)的完整流程:从获取Figma API密钥、设置MCP服务器配置,到添加代码生成规则。关键步骤包括生成Figm a个人访问令牌、配置cursor settings文件、启用MCP服务,以及设置代码规则(包含TypeScript/Vue技术栈规范、BEM命名规则等)。最后提供了将Figma设计稿转化为Vue页面的prompt模板,涵盖文件结构、图片处理、样式规范等具体要求,确保生成代码与设计稿高度一致

weixin_45644355的博客 2907

chatgpt赋能python:Python中如何画边框——深入探究

在计算机中,边框是指在一个物体或区域的边缘画出的轮廓线,通常用于强调物体的外形或界定物体的范围。图形界面、网页设计、报表开发等方面经常会用到边框。在Python中,我们可以使用各种库来实现边框的绘制。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于。

xuhss_com的博客 1362

从零开始Cubemx配置STM32搭载freeRTOS以及lwip实现tcp网络通信(二)

Cubemx配置LWIP,实现网络通信

qq_30623327的博客 1万+

白话讲解帕累托前沿点(Pareto Frontier)基础知识与实例解析

排除所有“劣解”,缩小决策范围;量化目标间的“权衡关系”(如“每增加1千元成本,续航提升多少小时”);支持不同场景下的个性化选择,平衡冲突目标。无论是手机选购、汽车设计,还是城市规划,帕累托前沿都是从“混乱的多目标”到“清晰的权衡”的关键桥梁,是现代决策科学中不可或缺的工具。通过数学建模,工程很多问题都可以建模成帕累托前沿求解问题,通过线性规划CPLEX、Gurobi 等优化工具,可以方便进行求解。

2138

python调用opencv,使程序暂停、并且使用鼠标事件在画面上画矩形框

为了配合测试工作,要求在原python工程下,加入空格画面暂停、然后鼠标画框看矩形框宽、高的功能: import cv2 global imgMouse global point1, point2 def on_mouse(event, x, y, flags, param): global imgMouse, point1, point2 img2 = imgMouse.copy() if event == cv2.EVENT_LBUTTONDOWN: #左键

m0_37635769的博客 1431

【OpenClaw从入门到精通】第66篇:Skill开发进阶——从零打造一个跨境选品Skill(附完整代码)(2026实测版)

2026年跨境电商效率革命中,AI Agent已成为选品核心工具,但通用Skill难以适配个性化需求。本文以“跨境选品”为实战场景,从零讲解OpenClaw Skill的完整开发流程:从需求分析、目录结构设计、SKILL.md编写,到Python脚本开发(含1688商品搜索、销量分析、竞品对比核心功能),再到调试测试、安全审计与ClawHub发布。文中提供可直接复制的完整代码,覆盖多平台适配、异常处理、数据可视化等进阶功能,同时解决API调用、链接失效等实际问题。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 567

py画框框

import matplotlib import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) rect1 = matplotlib.patches.Rectangle((-200, -100), 400, 200, color ='gr.

dcw0402的专栏 369

Wi-Fi物理帧间隔概念简介

物理帧间隔概念简介。

1042484520@qq.com(邮箱) 1778

SAP Build Work Zone standard edition 订阅报错 OIDC trust missing 的成因与完整解决路径

摘要:用户订阅SAP Build Work Zone时遇到422错误,提示未配置OpenID Connect信任。该错误表明业务用户需通过SAP Cloud Identity Services的OIDC协议认证,而当前子账户仅配置了SAML信任或未配置信任。解决方法是进入子账户的Trust Configuration页面,使用Establish Trust功能建立与SAP Cloud Identity Services的OIDC信任关系。这是SAP新版服务的强制要求,SAML协议已不被支持。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 197

python在屏幕上画画,屏幕上的Python绘图

我正在编写一个需要选择屏幕区域的应用程序。我需要将光标改为十字,然后在用户选择上绘制一个矩形。我搜索的第一件事是如何操作光标,我遇到了wxPython。有了wxPython,我可以很容易地在一个有面板的框架上做到这一点,问题是我需要窗口是透明的,这样用户可以在选择所需区域时看到他的屏幕,但是如果我使框架和面板对象透明,一切都会变得有问题。所以,我对任何解决方案都持开放态度,要么使用wxPython...

weixin_32353247的博客 3086

图解电动汽车:电动汽车的分类

前面《电动汽车简介》中简单介绍了电动汽车的分类,主要包括混合动力电动汽车(HEV)和纯电动汽车(BEV)两大类。其中,混合动力汽车又可分为非插电式混合动力汽车、插电式混合动力汽车(PHEV)以及增程式电动汽车(REEV)。 主要分类 简单来说,各类电动汽车的特点如下。 纯电动汽车(BEV)就是指动力来源完全由电能提供,由电动机驱动的汽车,并且电能储存在电池中。 混合动力汽车(HEV)则是指动力来源可以是化石燃料,也可以是电能,并且电能除了可以存储在电池中,还可以由化石能源转化而来。 非插电式混合动力汽车

程序员「阿基米东」的编程之旅 3088

Python pygame-ce(GUI编程)模块最完整教程(4/8)

调用一次被lru_cache装饰的函数后,返回值会被储存起来,如果第二次调用该函数的参数与先前调用的参数相同,那么就从储存的值中直接返回,大大提高了加载速度。pg.draw.rect方法中,必需的参数是surface, color, rect,表示进行矩形绘制的表面,矩形的颜色,矩形的位置。如果只进行矩形的碰撞,游戏角色中空白的部分的碰撞也会被检测到。(脏精灵支持的精灵组是LayeredDirty对象,而不是Group)脏精灵对象支持的方法和Sprite一样,此处不再赘述,下面介绍它的额外属性。

pythonzzy的博客 5355

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

画图: Python画矩形框

实际效果: 1. 核心函数:patches.Rectangle() 参数分别是:左下角顶点坐标,width即向右,height即向上,facecolor='none'会只有框,本身 没颜色 2. 我要画多个矩形 直接currentAxis.add_patch(rect),最后plt.show() 3. 设置坐标轴刻度:plt.xticks(range(155000,245000,3000),range(155,245,3)) ...

郝久武的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

chatgpt赋能python:Python画框:学习使用Python绘制图形框架

Python画框是一个高效而简单的绘图工具,可以为Python工程师提供快速方便的绘图解决方案。如果您正在寻找一个可定制的Python绘图库,那么Python画框是您的不二选择,赶快动手试一试吧!如果您正在使用Python 2.x版本,请使用。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。

laod112的博客 749

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

自学python(2):利用opencv实现读图,显示,画框,裁剪的python代码

#读图,显示的代码 import cv2 # 读取图像 img = cv2.imread(r'C:/labs/opencvtest/1.jpg', cv2.IMREAD_COLOR) #第一个参数是路径,第二个参数是读取方式,这里也可以写成1,三通道读取图片 # 创建窗口 cv2.namedWindow('opencv', cv2.WINDOW_NORMAL) #第一个参数是窗口名字,第二个参数是呈现方式,这里表示自定义,WINDOW_AUTOSIZE表示自适应 # 设置窗口大小 cv2.resizeW

qq_34885993的博客 4802

python窗口绘制,文字绘制,绘制矩形,yolo绘制方框,自瞄,绘制源码

【代码】python窗口绘制,文字绘制,绘制矩形,yolo绘制方框,自瞄,绘制源码。

qq_55436434的博客 1307

[Python]用Qt6和Pillow实现截图小工具

python借助QT6,PIL实现截屏功能。解决了DPI不同导致显示与抓取误差问题

weixin_67719939的博客 1991

python屏幕截图、图像数组、鼠标移动点击的游戏外挂应用

以程序自动完成游戏黑白快为例: 程序的逻辑是: 一、获取游戏界面屏幕截图 hwnd = 0 # 窗口的编号,0号表示当前活跃窗口 # 根据窗口句柄获取窗口的设备上下文DC(Divice Context) hwndDC = win32gui.GetWindowDC(hwnd) # 根据窗口的DC获取mfcDC mfcDC = win32ui.CreateDCFromHandle(hwndDC) # mf...

冲击10w 5140

从零开始的明日方舟python脚本创作(四)截屏模块

脚本原理 重述下本脚本的原理:确定了几个固定的检测区域,进行截屏,然后再和已经保存下来的区域截图进行对比,确定相应的操作。所以这几个区域的位置是事先就已经确定好了的。如何获取这几个区域的位置?可以通过截取窗口的屏幕之后通过画图查看相应的像素位置。如下图: 事先截取了一个完整的子窗口,然后根据画图软件就可以看到红点所在的像素位置为(685,414)。如果需要检测开始行动这个按钮,那么就可以根据画图确定开始行动这个按钮所在的截屏区域,然后通过截屏模块截取相应的图片并保存下来。 引入的包 import win3

hailoneko的博客 993

使用Python从.exe文件中提取图标

通过本文的学习,你应该已经掌握了如何使用Python从.exe文件中提取图标,并将其保存为.png文件。如果你有任何问题或建议,请在评论区留言。

m0_74972192的博客 5156

pywin32调用Windows API实现截图操作

绘制完成后,可以将内存 DC 中的内容复制到物理设备的 DC 中,或者直接将内存 DC 中的内容作为位图保存到文件中。同时,该方法返回的是原来在该 DC 中被选中的 GDI 对象的句柄,可以在之后的操作中用来恢复该 DC 的状态。需要注意的是,创建的空位图对象并没有指定宽度、高度和颜色位数等信息,因此在使用之前需要调用其 CreateCompatibleBitmap 方法来创建一个与指定设备上下文(Device Context,简称 DC)兼容的位图对象,并指定其宽度、高度和颜色位数等信息。

weixin_42099527的博客 3327

python开发windows界面_Python使用Windows API创建窗口示例【基于win32gui模块】

本文实例讲述了Python使用Windows API创建窗口。分享给大家供大家参考,具体如下:一、代码# -*- coding:utf-8 -*-#! python3import win32guifrom win32con import *def WndProc(hwnd,msg,wParam,lParam):if msg == WM_PAINT:hdc,ps = win32gui.BeginPa...

weixin_39648469的博客 456

WIN32截屏特定窗口的特定区域

采用WIN32进行截取特定窗口的特定区域,其中一个用途可用于OCR识别

surl61240的博客 1118

python读取内存位图_用Pywin32裁剪内存中的位图图像

我试图用pywin32在多个监视器上截图。在我有第三台显示器上需要的屏幕截图,但我只需要图像的某个区域。在我可以在将位图图像保存到硬盘驱动器时进行裁剪,如下所示:# initial set up code hooking up pywin32 to the desktopimport win32gui, win32ui, win32con, win32apihwin = win32gui.GetD...

weixin_42355865的博客 730
上一篇: 关于mklink的/D /J 区别
下一篇: 那些坑儿系列--Javascript--1--百度地图 api
notback
博客等级 码龄25年 25粉丝 18原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值