windows屏幕分辨率及系统缩放获取方法大全

10 篇文章 0 订阅

本人微信公众号:CPP进阶之旅
如果觉得这篇文章对您有帮助,欢迎关注 “CPP进阶之旅” 学习更多技术干货

方法一:MonitorFromWindow

//获取程序当前所在显示器的分辨率大小,可以动态的获取程序所在显示器的分辨率
SIZE GetScreenResolution(HWND hWnd) {
    SIZE size;
    if(!hWnd)
        return size;

    //MONITOR_DEFAULTTONEAREST 返回值是最接近该点的屏幕句柄
    //MONITOR_DEFAULTTOPRIMARY 返回值是主屏幕的句柄
    //如果其中一个屏幕包含该点,则返回值是该屏幕的HMONITOR句柄。如果没有一个屏幕包含该点,则返回值取决于dwFlags的值
    HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
    MONITORINFOEX miex;
    miex.cbSize = sizeof(miex);
    if (!GetMonitorInfo(hMonitor, &miex))
        return size;

    DEVMODE dm;
    dm.dmSize = sizeof(dm);
    dm.dmDriverExtra = 0;

    //ENUM_CURRENT_SETTINGS 检索显示设备的当前设置
    //ENUM_REGISTRY_SETTINGS 检索当前存储在注册表中的显示设备的设置
    if (!EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm))
        return size;

    size.cx = dm.dmPelsWidth;
    size.cy = dm.dmPelsHeight;
    return size;
}

方法二:SystemParametersInfo

//获取可用桌面大小
RECT rect;
SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
int cx = rect.right - rect.left;
int cy = rect.bottom - rect.top;

方法三:GetSystemMetrics

//多显示器时,使用SM_CXSCREEN,SM_CYSCREEN获取只是主屏大小
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);

方法四:GetDeviceCaps

//在多显示器系统中,GetDeviceCaps 函数返回主显示器的功能。如果你想为其他显示器的信息,则必须使用多显示器的 API 函数或调用 CreateDC 函数得到一个 hdc 指定显示器的设备环境
HDC hdcScreen = GetDC(NULL);
int cx = GetDeviceCaps(hdcScreen, HORZRES);
int cy = GetDeviceCaps(hdcScreen, VERTRES);
DeleteObject(hdcScreen);

方法五:获取系统缩放值

    // 获取窗口当前显示的监视器
    HWND hWnd = GetDesktopWindow();//根据需要可以替换成自己程序的句柄 
    HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);

    // 获取监视器逻辑宽度与高度
    MONITORINFOEX miex;
    miex.cbSize = sizeof(miex);
    GetMonitorInfo(hMonitor, &miex);
    int cxLogical = (miex.rcMonitor.right - miex.rcMonitor.left);
    int cyLogical = (miex.rcMonitor.bottom - miex.rcMonitor.top);

    // 获取监视器物理宽度与高度
    DEVMODE dm;
    dm.dmSize = sizeof(dm);
    dm.dmDriverExtra = 0;
    EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm);
    int cxPhysical = dm.dmPelsWidth;
    int cyPhysical = dm.dmPelsHeight;

    //缩放比例计算
    double horzScale = ((double)cxPhysical / (double)cxLogical);
    double vertScale = ((double)cyPhysical / (double)cyLogical);

重要说明

欢迎关注我的个人微信公众号,查看专业的客户端/服务端开发知识、笔试面试题目、程序员职场经验与心得分享。
在这里插入图片描述

您可以使用pyautogui库中的函数来设置Windows屏幕的缩放。具体来说,您可以使用pyautogui的函数pyautogui.size()来获取当前屏幕的分辨率,然后使用pyautogui的函数pyautogui.moveTo()和pyautogui.click()来模拟用户点击“设置”、“显示”、“缩放和布局”、“更改文本、应用等项目的大小”、“100%”、“应用”等按钮和选项,以设置屏幕缩放。以下是一个示例代码: import pyautogui import time # 获取当前屏幕分辨率 screenWidth, screenHeight = pyautogui.size() # 模拟用户点击“设置”按钮 pyautogui.moveTo(screenWidth / 2, screenHeight / 2) pyautogui.click() # 等待设置窗口打开 time.sleep(1) # 模拟用户点击“显示”选项 pyautogui.moveTo(screenWidth / 2, screenHeight / 2) pyautogui.click() # 等待显示窗口打开 time.sleep(1) # 模拟用户点击“缩放和布局”选项 pyautogui.moveTo(screenWidth / 2, screenHeight / 2) pyautogui.click() # 等待缩放和布局窗口打开 time.sleep(1) # 模拟用户点击“更改文本、应用等项目的大小”选项 pyautogui.moveTo(screenWidth / 2, screenHeight / 2) pyautogui.click() # 等待更改文本、应用等项目的大小窗口打开 time.sleep(1) # 模拟用户点击“100%”选项 pyautogui.moveTo(screenWidth / 2, screenHeight / 2) pyautogui.click() # 等待100%选项生效 time.sleep(1) # 模拟用户点击“应用”按钮 pyautogui.moveTo(screenWidth / 2, screenHeight / 2) pyautogui.click()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值