桌面扩展时使用ChangeDisplaySettings更改分辨率会导致黑屏

桌面扩展时使用ChangeDisplaySettings更改分辨率会导致黑屏,c,windows,winapi,C,Windows,Winapi,我使用此功能更改分辨率: 变更决议(NULL,1440900) 这很有效 扩展桌面时会出现问题(按Windows键+p并选择“扩展”)。然后,当桌面被扩展(非精神显示)时,在使用我的ChangeResolution后,只要我的函数调用ChangeDisplaySettings(&oDEVMODE,bUpdateReg?CDS_UPDATEREGISTRY:0),屏幕就会变黑 返回屏幕的方法是再次按Windows键+p,然后按Enter键 (因为屏幕是黑色的,所以你看不到自己在做什么) 无论我下了

我使用此功能更改分辨率:

变更决议(NULL,1440900)

这很有效

扩展桌面时会出现问题(按Windows键+p并选择“扩展”)。然后,当桌面被扩展(非精神显示)时,在使用我的ChangeResolution后,只要我的函数调用ChangeDisplaySettings(&oDEVMODE,bUpdateReg?CDS_UPDATEREGISTRY:0),屏幕就会变黑

返回屏幕的方法是再次按Windows键+p,然后按Enter键

(因为屏幕是黑色的,所以你看不到自己在做什么)

无论我下了什么新决心,它都会变黑

如果我尝试在扩展模式下更改分辨率,但从控制面板更改分辨率效果很好,因此问题在于我的功能

我认为这是因为当我更改默认屏幕的分辨率(NULL)时,我还需要更改虚拟屏幕的某些内容,但我不确定

有什么帮助吗


谢谢

你还在面对这个问题吗?你还在面对这个问题吗?
bool ChangeResolution(WCHAR *sDeviceName, int iNewW, int iNewH)
{
    DEVMODE oDEVMODE = { 0 };
    oDEVMODE.dmSize = sizeof(DEVMODE);
    EnumDisplaySettings(sDeviceName, ENUM_CURRENT_SETTINGS, &oDEVMODE);

    oDEVMODE.dmPelsWidth = iNewW;
    oDEVMODE.dmPelsHeight = iNewH;
    bool bUpdateReg = true;
    LONG lRet = ChangeDisplaySettings(&oDEVMODE, CDS_TEST | CDS_UPDATEREGISTRY);
    if (lRet != DISP_CHANGE_SUCCESSFUL)
    {
        lRet = ChangeDisplaySettings(&oDEVMODE, CDS_TEST);
        bUpdateReg = false;
    }
    if (lRet == DISP_CHANGE_SUCCESSFUL)
    lRet = ChangeDisplaySettings(&oDEVMODE, bUpdateReg?CDS_UPDATEREGISTRY : 0);

    return lRet == DISP_CHANGE_SUCCESSFUL;
}