Windows下双显示器截屏方法

本文详细介绍了在Windows环境下实现多显示器截屏的技术细节,包括如何获取正确的物理分辨率,特别是当桌面扩展到双显示器时,如何计算整个桌面的分辨率,以及具体的截屏代码实现。

网上的Windows环境下截屏的源代码很多,但是看到的都是只能适应单显示器,无法截取桌面扩展到双显示器情况下的完整屏幕。过查找资料和摸索,发现问题的关键就在于正确获得截屏的长宽尺寸。通常,计算屏幕实际大小可以用:

HWND hWnd = GetDesktopWindow();
RECT re;
GetWindowRect(window, &re);
int width = re.right, height = re.bottom;

上面的代码可以获得单显示器缩放比例100%情况下的屏幕分辨率,但这只是虚尺寸,所以若是用户将屏幕缩放比例设置为超出100%,则会导致截屏区域的宽和高计算出错,因而无法截取到完整的屏幕。代码得改成如下所示:

void getPhysicalResolution(int& width, int& height)
{
   // 获取窗口当前显示的监视器
   // 使用桌面的句柄.
   HWND hWnd = GetDesktopWindow();
   HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);

   // 获取监视器逻辑宽度与高度
   MONITORINFOEX miex;
   miex.cbSize = sizeof(miex);
   GetMonitorInfo(hMonitor, &miex);

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

上述代码可以不受Windows显示缩放比例的影响,获得屏幕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值