Python win32屏幕截图

Python win32屏幕截图,python,python-3.x,Python,Python 3.x,截图捕获时没有问题,问题是在不同分辨率的机器上运行时,或者设置中的缩放调整为150%时。 屏幕截图显示了真实屏幕的30% 已测试的Windows 10(1920 X 1080)(缩放=100%)屏幕截图=100% 已测试的Windows 8.1(1920 X 1080)(缩放比例=150%)屏幕截图=30% import win32gui # screenshot import win32ui # screenshot import win32con # screenshot import wi

截图捕获时没有问题,问题是在不同分辨率的机器上运行时,或者设置中的缩放调整为150%时。 屏幕截图显示了真实屏幕的30%

已测试的Windows 10(1920 X 1080)(缩放=100%)屏幕截图=100%

已测试的Windows 8.1(1920 X 1080)(缩放比例=150%)屏幕截图=30%

import win32gui # screenshot
import win32ui # screenshot
import win32con # screenshot
import win32api # screenshot

def screenshot():

    # Identifying the main desktop window
    hdesktop = win32gui.GetDesktopWindow()

    #determines the size of the monitors in pixels
    width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
    height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
    left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
    top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)

    # DesktopContext
    desktop_dc = win32gui.GetWindowDC(hdesktop)
    img_dc = win32ui.CreateDCFromHandle(desktop_dc)

    # Buffer of context
    mem_dc = img_dc.CreateCompatibleDC()

    # Create a image object
    screenshot = win32ui.CreateBitmap()
    screenshot.CreateCompatibleBitmap(img_dc, width, height)
    mem_dc.SelectObject(screenshot)

    # copy the context of window
    mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top), win32con.SRCCOPY)

    # Save
    data_hoje = datetime.now().strftime('%Y-%b-%d')
    relog = datetime.now().strftime('%Hh%Mm%Ss')
    screenshot.SaveBitmapFile(mem_dc, f".\\{data_hoje}\\{data_hoje}_{relog}.bmp")

    # releasing the processes
    mem_dc.DeleteDC()
    win32gui.DeleteObject(screenshot.GetHandle())
已测试的Windows 10(1920 X 1080)(缩放比例=150%)屏幕截图=30%

import win32gui # screenshot
import win32ui # screenshot
import win32con # screenshot
import win32api # screenshot

def screenshot():

    # Identifying the main desktop window
    hdesktop = win32gui.GetDesktopWindow()

    #determines the size of the monitors in pixels
    width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
    height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
    left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
    top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)

    # DesktopContext
    desktop_dc = win32gui.GetWindowDC(hdesktop)
    img_dc = win32ui.CreateDCFromHandle(desktop_dc)

    # Buffer of context
    mem_dc = img_dc.CreateCompatibleDC()

    # Create a image object
    screenshot = win32ui.CreateBitmap()
    screenshot.CreateCompatibleBitmap(img_dc, width, height)
    mem_dc.SelectObject(screenshot)

    # copy the context of window
    mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top), win32con.SRCCOPY)

    # Save
    data_hoje = datetime.now().strftime('%Y-%b-%d')
    relog = datetime.now().strftime('%Hh%Mm%Ss')
    screenshot.SaveBitmapFile(mem_dc, f".\\{data_hoje}\\{data_hoje}_{relog}.bmp")

    # releasing the processes
    mem_dc.DeleteDC()
    win32gui.DeleteObject(screenshot.GetHandle())

您可以看看pyautogui,它是多平台的。在我的linux机器上(120%的分数缩放)可以完美地工作

import pyautogui

shot = pyautogui.screenshot()
shot.save("screenshot.png")

这是我的工作!谢谢