gpt4 book ai didi

c++ - 在 Windows/C++ 中强制显示分辨率

转载 作者:可可西里 更新时间:2023-11-01 14:13:54 34 4
gpt4 key购买 nike

我将其中一个切换 View 设置为在两台机器之间切换一个监视器,它似乎从监视器中剥离了一些信息。显示器的原始分辨率是 1920x1080@60hz,但 Windows 拒绝让我将其设置为高于 25hz 隔行扫描的分辨率,这看起来非常糟糕。我已经尝试了广泛的谷歌搜索建议的所有驱动程序和设置,但仍然一无所获。

作为一个快速项目,我尝试查看是否可以使用 ChangeDisplaySettingsEx winapi 函数将显示器强制设置为特定显示设置,但看起来 Windows 仍在检查以确保模式处于不正确的支持模式集并返回 DISP_CHANGE_BADMODE

这里是完整的函数:

WCHAR deviceName[64];
DISPLAY_DEVICE dd;
dd.cb = sizeof(DISPLAY_DEVICE);
int index=0;
while (EnumDisplayDevices(NULL, index++, &dd, 0))
{
// first monitor is the problem one
if (index == 1) {
lstrcpy(deviceName, dd.DeviceName);
}
}

DEVMODE dmScreenSettings;
ZeroMemory(&dmScreenSettings, sizeof(DEVMODE));
dmScreenSettings.dmSize = sizeof(DEVMODE);
dmScreenSettings.dmPelsWidth = 1920;
dmScreenSettings.dmPelsHeight = 1080;
dmScreenSettings.dmBitsPerPel = 32;
dmScreenSettings.dmDisplayFrequency = 60;
dmScreenSettings.dmFields = DM_DISPLAYFREQUENCY | DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

LONG res = ChangeDisplaySettingsExW((LPCWSTR) &deviceName, &dmScreenSettings, NULL, CDS_RESET, NULL);
if (res != DISP_CHANGE_SUCCESSFUL)
{
if (res == DISP_CHANGE_BADMODE)
MessageBoxA(NULL, "Bad mode", "Failed", MB_ICONHAND);
else if (res == DISP_CHANGE_BADPARAM)
MessageBoxA(NULL, "Bad Param", "Failed", MB_ICONHAND);
else
MessageBoxA(NULL, "Other error", "Failed", MB_ICONHAND);
}

我看过 How can I force any display resolution/timing I want?如果可能的话,我宁愿不使用 ATI SDK(我有一个 ATI Radeon)。有什么建议么?我认为用软件解决这个问题会非常巧妙。

最佳答案

因此,在 SuperUser 上进行搜索为我指明了正确的方向(感谢 Josh)。 switchview 没有正确传递 EDID 数据,Windows Vista/7 坚持在所有情况下都使用可用的 EDID 数据。有一些关于移除两个 EDID 引脚的信息,但我不想沿着这条路走下去。

谷歌搜索让我找到了 http://msdn.microsoft.com/en-us/windows/hardware/gg487330.aspx其中有一份关于覆盖您的 EDID 的白皮书。这反过来又把我带到了一个论坛主题:http://www.sevenforums.com/tutorials/7947-force-dvi-hdmi-resolutions-refresh-rates.html .有人很好地创建了一个工具来轻松生成 EDID 覆盖 .dat 文件。

从那时起,我做了以下事情:

  1. 使用 phoenix.exe 工具为我的主显示器生成一个 .dat(它工作正常)

  2. 在 moninfo.exe 中加载 dat 以创建 .inf 驱动程序文件

  3. 使用“从磁盘安装”来指定我的新 .inf 文件

  4. 厚颜无耻地忽略了驱动程序未签名的大红色警告(通常不是一件好事)

  5. 重新启动并将分辨率切换到正确的分辨率

关于c++ - 在 Windows/C++ 中强制显示分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11849857/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com