在 NVIDIA GPU 上以编程方式启用未显示的分辨率
Enable resolutions not exposed by display programmatically on NVIDIA GPUs
我正在开发一个解决方案,需要为一组系统上的特定连接显示器设置自定义分辨率。我现在的工作正常,但只要通过 NVIDIA 控制面板手动检查 "Enable resolutions not exposed by the display" 选项(在显示下找到 -> 更改分辨率 > 自定义... > 启用显示器未显示的分辨率) .
有没有办法以编程方式启用此选项,最好是通过 NVIDIA 的核心 SDK - NVAPI。
设置自定义分辨率可以通过 ChangeDisplaySettingsEx 函数启用,由 Windows API 公开,通过传入 CDS_ENABLE_UNSAFE_MODES
作为第四个参数 dwflags
. (要禁用,请使用 CDS_DISABLE_UNSAFE_MODES
。)
示例用法的代码摘录:
DWORD deviceIndex = 0;
DISPLAY_DEVICE displayDevice = { 0 };
displayDevice.cb = sizeof(DISPLAY_DEVICE);
while (EnumDisplayDevices(NULL, deviceIndex, &displayDevice, 0)) {
deviceIndex++;
DEVMODE deviceMode = { 0 };
deviceMode.dmSize = sizeof(DEVMODE);
if (!EnumDisplaySettings(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &deviceMode))
continue;
auto result = ChangeDisplaySettingsEx(displayDevice.DeviceName, &deviceMode, NULL, CDS_ENABLE_UNSAFE_MODES, NULL);
if (result != DISP_CHANGE_SUCCESSFUL) {
// Handle failure here...
}
}
请注意,这将为所有显示设备启用不安全的图形模式。
我正在开发一个解决方案,需要为一组系统上的特定连接显示器设置自定义分辨率。我现在的工作正常,但只要通过 NVIDIA 控制面板手动检查 "Enable resolutions not exposed by the display" 选项(在显示下找到 -> 更改分辨率 > 自定义... > 启用显示器未显示的分辨率) .
有没有办法以编程方式启用此选项,最好是通过 NVIDIA 的核心 SDK - NVAPI。
设置自定义分辨率可以通过 ChangeDisplaySettingsEx 函数启用,由 Windows API 公开,通过传入 CDS_ENABLE_UNSAFE_MODES
作为第四个参数 dwflags
. (要禁用,请使用 CDS_DISABLE_UNSAFE_MODES
。)
示例用法的代码摘录:
DWORD deviceIndex = 0;
DISPLAY_DEVICE displayDevice = { 0 };
displayDevice.cb = sizeof(DISPLAY_DEVICE);
while (EnumDisplayDevices(NULL, deviceIndex, &displayDevice, 0)) {
deviceIndex++;
DEVMODE deviceMode = { 0 };
deviceMode.dmSize = sizeof(DEVMODE);
if (!EnumDisplaySettings(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &deviceMode))
continue;
auto result = ChangeDisplaySettingsEx(displayDevice.DeviceName, &deviceMode, NULL, CDS_ENABLE_UNSAFE_MODES, NULL);
if (result != DISP_CHANGE_SUCCESSFUL) {
// Handle failure here...
}
}
请注意,这将为所有显示设备启用不安全的图形模式。