加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 05:28:14 所属栏目:Windows 来源:网络整理
导读:我有一个开关视图设置为在两台机器之间切换一台显示器,它似乎从显示器中剥离了一些信息.显示器的原始分辨率为1920×1080 @ 60hz,但 Windows拒绝让我将其设置为高于25hz隔行扫描的任何东西,这看起来非常糟糕.我已经尝试了广泛的谷歌搜索建议的所有驱动程序和
我有一个开关视图设置为在两台机器之间切换一台显示器,它似乎从显示器中剥离了一些信息.显示器的原始分辨率为1920×1080 @ 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",MB_ICONHAND);
    else
        MessageBoxA(NULL,"Other error",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文件.

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

>使用phoenix.exe工具为我的主监视器生成.dat(工作正常)>在moninfo.exe中加载数据以创建.inf驱动程序文件>使用“Have disk”指定我的新.inf文件>肆无忌惮地忽略了司机未签约的大红色警告(通常不是一件好事)>重新启动并将分辨率切换为正确的分辨率

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读