最近研究了一下window下显示器的扩展和屏幕分辨率的修改 ,做一个记录。
修改分辨率和扩展显示器主要有两种方法:
一、用ChangeDisplaySettingsEx来实现
1、EnumDisplayDevices 枚举所有的显示器信息,过滤后进行保存
2、EnumDisplaySettings 再次检查显示器分辨率是否支持
3、ChangeDisplaySettingsEx 根据DEVMODE的不同配置来设置显示器为主显示器、扩展、分辨率
可以设置扩展所有屏幕,因为需要。只扩展了Nvida显卡,并且断开了Intel的显卡。
源码地址:仅用Windows自动API实现 编译版本VS2013
二、在nvidia显卡的状况下使用nvapi来实现,目前用到NvApi版本是nvapi-r337
1、NvAPI_EnumLogicalGPUs 枚举所有的逻辑GPU
2、NvAPI_GetPhysicalGPUsFromLogicalGPU拿到物理GPU
3、NvAPI_GPU_GetAllDisplayIds拿到显示器的所有信息(需要两次获取)
4、NvAPI_DISP_SetDisplayConfig根据stConnectedGPUDisplayInfo的参数来设置显示器 主要是进行显示器的扩展
5、NvAPI_DISP_GetDisplayConfig 拿到显示器的信息 改边stConnectedGPUDisplayInfo参数 再NvAPI_DISP_SetDisplayConfig 设置分辨率
主要用到的函数是NvAPI_DISP_SetDisplayConfig,必须要Nvapi库