ChangeDisplaySettingsが効かない

実現したいこと

ChangeDisplaySettingsを用いて、アプリの使用に合わせた画面解像度に設定後、アプリ終了直前に元に解像度に戻したいです。

前提

最初は横1920✕縦1080のディスプレイに対し、Windows設定のシステム>ディスプレイから横1680✕縦1050の解像度に設定します。
次に、本アプリを起動し、ChangeDisplaySettings関数でディスプレイ設定を横1920✕縦1080にします。

発生している問題

アプリ終了直前に、同じくChangeDisplaySettings関数で横1680✕縦1050に戻そうとしても戻りません。
どうすれば戻りますか。

該当のソースコード

C++

12POINT screensizeOld;3 4void ChangeDisplayMode(HWND hWnd,LONG w,LONG h)5{6 //ディスプレイデバイス情報取得7 DISPLAY_DEVICE DispDev;8 DEVMODE defaultMode;9 10 ZeroMemory(&DispDev, sizeof(DispDev));11 DispDev.cb = sizeof(DispDev);12 13 14ZeroMemory(&defaultMode, sizeof(DEVMODE));15defaultMode.dmSize = sizeof(DEVMODE);16EnumDisplayDevices(NULL, NULL, &DispDev, 0);17 18 19 20 if (EnumDisplaySettings(DispDev.DeviceName, ENUM_REGISTRY_SETTINGS, &defaultMode)) {21 22 //現在のディスプレイ解像度を格納。23 screensizeOld.x = defaultMode.dmPelsWidth;24 screensizeOld.y = defaultMode.dmPelsHeight;25 26 //引数で設定した解像度を格納27 defaultMode.dmPelsWidth = w;28 defaultMode.dmPelsHeight = h;29 ChangeDisplaySettings( &defaultMode,0);//解像度を変更30 31 }32 else33 {34 screensizeOld.x = 0;35 screensizeOld.y = 0;36 }37

試したこと

上記29行目でブレークポイントを貼り、アプリ終了時にここを通過していることは確認済みです。
また、このとき、w,hには1680,1050が格納されています。

補足情報(FW/ツールのバージョンなど)

Microsoft Visual Studio Community 2022 (64 ビット) - Current
Version 17.4.4
よろしくお願いいたします。

コメントを投稿

0 コメント