1018 文字
5 分
ショートカット一つでディスプレイの解像度・リフレッシュレート・表示サイズを切り替える方法

はじめに#

最近、原神にはまっている。

プレイの際には仮想解像度で4K画質にしてプレイしているのだが、APEX等の4Kが必要ないゲームをやる場合ディスプレイの設定を戻さなくてはならない。逆に原神は144Hzに対応していないので、APEXプレイ後にそのまま原神を起動しようとするといつまでたっても正常に開始できない。

いちいち手動でディスプレイ解像度やリフレッシュレートを変更していたのだが、いいかげん面倒くさくなってきたのでショートカットからFHD/144Hz⇔4K/60Hzの切り替えができるようにしてみた。

必要なもの#

  • QRes - コマンドライン上から解像度やリフレッシュレートの変更が可能になるオープンソースソフトウェア
  • SetDPI - ディスプレイの表示サイズ等を変更できるオープンソースソフトウェア

上記2つを用いて切り替え用のバッチファイルを作成していきます。
……が、過程とかどうでもいいから出来るようになればいい! という方のために作成後のバッチファイルと上記の2ファイルを同梱したzipを載せておきます。

解凍した後フォルダをC直下に配置し、フォルダ内のdisplay_changer.batをダブルクリックすれば解像度を切り替えられます。

バッチファイル本体であるdisplay_changer.batはどこにおいても大丈夫ですので、デスクトップにおいてダブルクリックで切り替えるのがおすすめ。

(FHDの場合は4K/60Hz/表示倍率200%に、4Kの場合はFHD/144Hz/表示倍率100%へと切り変わるよう設定しています。そのあたりの数値を変えたい場合は、下の説明を読んでバッチファイルの中身を書き換えてください。難しくはないです。)

zipファイルのダウンロードはこちら

処理内容#

下記がdisplay_changer.batの中身になります。

echo off

set HorizontalResolution=
set VerticalResolution=
set SetDpi_APP_PATH="C:\display_changer\SetDpi.exe"
set QRes_APP_PATH="C:\display_changer\QRes.exe"
set DISPLAY_ID=1

::Win32_VideoControllerにて解像度取得
for /f "tokens=* delims=" %%@ in ('wmic path Win32_VideoController get CurrentHorizontalResolution  /format:value') do (
    for /f "tokens=2 delims==" %%# in ("%%@") do set "VerticalResolution=%%#"
)
for /f "tokens=* delims=" %%@ in ('wmic path Win32_VideoController get CurrentVerticalResolution /format:value') do (
    for /f "tokens=2 delims==" %%# in ("%%@") do set "HorizontalResolution=%%#"
)

set Resolution=%VerticalResolution%x%HorizontalResolution%

if %Resolution%==1920x1080 (
    
    ::1920x1080の場合
    %QRes_APP_PATH% /X 3840 /Y 2160 /R 60
    set SCALE_VALUE=200
    "%APP_PATH%" %DISPLAY_ID% %SCALE_VALUE%

) else if %Resolution%==3840x2160 (

    ::3840x2160の場合
    %QRes_APP_PATH% /X 1920 /Y 1080 /R 144
    set SCALE_VALUE=100
    "%APP_PATH%" %DISPLAY_ID% %SCALE_VALUE%

)

順を追って説明していきます。まず最初のブロックでは変数の設定を行っています。
もしCドライブ直下以外の箇所に設置する場合は「SetDpi_APP_PATH」「QRes_APP_PATH」のあとのダブルクオーテーションで囲まれている部分を設置先のexeファイルのパスに書き換えてください。

echo off

set HorizontalResolution=
set VerticalResolution=
set SetDpi_APP_PATH="C:\display_changer\SetDpi.exe"
set QRes_APP_PATH="C:\display_changer\QRes.exe"
set DISPLAY_ID=1

次のブロックでは現在の解像度の取得を行っています。

::Win32_VideoControllerにて解像度取得
for /f "tokens=* delims=" %%@ in ('wmic path Win32_VideoController get CurrentHorizontalResolution  /format:value') do (
    for /f "tokens=2 delims==" %%# in ("%%@") do set "VerticalResolution=%%#"
)
for /f "tokens=* delims=" %%@ in ('wmic path Win32_VideoController get CurrentVerticalResolution /format:value') do (
    for /f "tokens=2 delims==" %%# in ("%%@") do set "HorizontalResolution=%%#"
)

取得した解像度を〇〇×□□形式にして変数Resolutionに格納。

set Resolution=%VerticalResolution%x%HorizontalResolution%

ディスプレイサイズが1920×1080の際、括弧内の処理が行われます。ここの数値を変更すれば他のディスプレイサイズにも対応可能。

if %Resolution%==1920x1080 (

QRas.exeに引数として変更後のディスプレイサイズとリフレッシュレートを渡し起動。リフレッシュレートを変更したくない場合は/R 60の部分を消せばOKです。

    "C:\display_changer\QRes.exe" /X 3840 /Y 2160 /R 60

最後です。表示倍率や適用するディスプレイのIDを引数にSetDpi.exeを呼び出します。
SCALE_VALUEの値には変更後の表示倍率を入れてください。100であれば100%、200であれば200%になります。

    set SCALE_VALUE=200
    "%SetDpi_APP_PATH%" %DISPLAY_ID% %SCALE_VALUE%

おわりに#

これで面倒な切り替えもダブルクリック一発でできるようになりました。快適。
もし動かないよーとかコードに間違い等指摘あればコメントいただければと思います。

ショートカット一つでディスプレイの解像度・リフレッシュレート・表示サイズを切り替える方法
https://tarailife.com/posts/change-displayresolution/
作者
keizokukun
公開日
2022-06-06
ライセンス
CC BY-NC-SA 4.0