吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 445|回复: 5
收起左侧

[经验求助] 关于python 后台截图 问题

[复制链接]
亡心胜利之剑 发表于 2024-6-18 10:40
25吾爱币
使用
ctypes.windll.user32.PrintWindow(hwnd, save_dc.GetSafeHdc(),2)
ctypes.windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(),3)
ctypes.windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(),1)

三种模式 都试了 有的软件还是截图出来的是黑屏   软件是unity渲染的
请教各位大佬python 后台截图  不是截屏幕然后选择区域截图是针对软件只截图软件
还有什么好用的方法或者库吗

最佳答案

查看完整内容

[mw_shl_code=python,true]import ctypes from ctypes import wintypes import win32gui import win32ui from PIL import Image from datetime import datetime # 定义必要的 Windows API 函数和结构 user32 = ctypes.windll.user32 gdi32 = ctypes.windll.gdi32 def get_window_rect(window_title): hwnd = win32gui.FindWindow(None, window_title) if hwnd == 0: print(f"Window with title ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

duanxc 发表于 2024-6-18 10:40
[Python] 纯文本查看 复制代码
import ctypes
from ctypes import wintypes
import win32gui
import win32ui
from PIL import Image
from datetime import datetime

# 定义必要的 Windows API 函数和结构
user32 = ctypes.windll.user32
gdi32 = ctypes.windll.gdi32


def get_window_rect(window_title):
    hwnd = win32gui.FindWindow(None, window_title)
    if hwnd == 0:
        print(f"Window with title '{window_title}' not found.")
        return None, None
    rect = win32gui.GetWindowRect(hwnd)
    return rect, hwnd


def window_capture(window_title):
    rect, hwnd = get_window_rect(window_title)
    if not hwnd:
        return

    left, top, right, bottom = rect
    width = right - left
    height = bottom - top


    # 获取窗口的设备上下文
    hwndDC = user32.GetDC(hwnd)
    mfcDC = win32ui.CreateDCFromHandle(hwndDC)
    saveDC = mfcDC.CreateCompatibleDC()

    # 创建位图对象
    saveBitMap = win32ui.CreateBitmap()
    saveBitMap.CreateCompatibleBitmap(mfcDC, width, height)
    saveDC.SelectObject(saveBitMap)

    # 使用 PrintWindow 将窗口内容复制到位图对象
    result = user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 1)
    if result != 1:
        print("PrintWindow failed.")
        return

    # 获取位图信息并转换为 Pillow 图像
    bmpinfo = saveBitMap.GetInfo()
    bmpstr = saveBitMap.GetBitmapBits(True)
    img = Image.frombuffer(
        'RGB',
        (bmpinfo['bmWidth'], bmpinfo['bmHeight']),
        bmpstr, 'raw', 'BGRX', 0, 1
    )

    # 释放设备上下文和位图对象
    user32.ReleaseDC(hwnd, hwndDC)
    saveDC.DeleteDC()
    mfcDC.DeleteDC()
    win32gui.DeleteObject(saveBitMap.GetHandle())

    # 保存图像
    timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
    output = f'{timestamp}.png'
    img.save(output)
    print(f'{output}')


if __name__ == "__main__":
    window_title = "微信"  # 修改为你的微信窗口标题
    window_capture(window_title)

窗口不能最小化,不能在后台
 楼主| 亡心胜利之剑 发表于 2024-6-18 10:47
 楼主| 亡心胜利之剑 发表于 2024-6-18 16:51
duanxc 发表于 2024-6-18 16:43
[mw_shl_code=python,true]import ctypes
from ctypes import wintypes
import win32gui

这个 不行 还是黑屏 PrintWindow  跟  
BitBlt 后台截图我都试了 都不行
duanxc 发表于 2024-6-18 16:55
你是不是最小化窗口了
 楼主| 亡心胜利之剑 发表于 2024-6-18 17:27
duanxc 发表于 2024-6-18 16:55
你是不是最小化窗口了

没有最小化
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-16 00:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表