はじめに
たまたま自分のブログの記事の内容について知恵袋で質問されている方がいた。 自分の書いた記事を読んでくれている人がいるとは……と感動するとともにバッチが動作しなかったということで申し訳無さも覚えた。
というわけで以前書いた記事について、情報が古くなっていたため新しくバッチを作り直した。 主な変更点は下記になります。
- 廃止になるらしいwmicの使用をやめPowerShellのGet-CimInstanceに変更
- スケールの変更(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 QRes_APP_PATH="C:\display_changer\display_changer\QRes.exe"
::PowerShellで横解像度を取得
for /f "delims=" %%A in ('powershell -command "(Get-CimInstance -ClassName Win32_VideoController).CurrentHorizontalResolution"') do (
set "HorizontalResolution=%%A"
)
::PowerShellで縦解像度を取得
for /f "delims=" %%A in ('powershell -command "(Get-CimInstance -ClassName Win32_VideoController).CurrentVerticalResolution"') do (
set "VerticalResolution=%%A"
)
set Resolution=%HorizontalResolution%x%VerticalResolution%
if %Resolution%==1920x1080 (
::1920x1080の場合
%QRes_APP_PATH% /X 3840 /Y 2160 /R 60
::setDPIのパス スケール ディスプレイID
C:\display_changer\display_changer\SetDpi.exe 200 1
) else if %Resolution%==3840x2160 (
::3840x2160の場合
%QRes_APP_PATH% /X 1920 /Y 1080 /R 144
::setDPIのパス スケール ディスプレイID
C:\display_changer\display_changer\SetDpi.exe 100 1
)
順を追って説明していきます。まず最初のブロックでは変数の設定を行っています。
もしCドライブ直下以外の箇所に設置する場合は「QRes_APP_PATH」のあとのダブルクオーテーションで囲まれている部分を設置先のexeファイルのパスに書き換えてください。
@echo off
set HorizontalResolution=
set VerticalResolution=
set QRes_APP_PATH="C:\display_changer\display_changer\QRes.exe"
次のブロックでは現在の解像度の取得を行っています。
::PowerShellで横解像度を取得
for /f "delims=" %%A in ('powershell -command "(Get-CimInstance -ClassName Win32_VideoController).CurrentHorizontalResolution"') do (
set "HorizontalResolution=%%A"
)
::PowerShellで縦解像度を取得
for /f "delims=" %%A in ('powershell -command "(Get-CimInstance -ClassName Win32_VideoController).CurrentVerticalResolution"') do (
set "VerticalResolution=%%A"
)
取得した解像度を〇〇×□□形式にして変数Resolutionに格納。
set Resolution=%HorizontalResolution%x%VerticalResolution%
ディスプレイサイズが1920×1080の際、括弧内の処理が行われます。ここの数値を変更すれば他のディスプレイサイズにも対応可能。
if %Resolution%==1920x1080 (
QRas.exeに引数として変更後のディスプレイサイズとリフレッシュレートを渡し起動。リフレッシュレートを変更したくない場合は/R 60の部分を消せばOKです。
"C:\display_changer\QRes.exe" /X 3840 /Y 2160 /R 60
最後です。表示倍率や適用するディスプレイのIDを引数にSetDpi.exeを呼び出します。
スケールは4Kでは200FHD100であれば100で設定しています。好きなように調整してください。
マルチディスプレイ環境でメインディスプレイ以外を対象にしたい場合はモニターインデックスを変更してください。モニターインデックスは設定のディスプレイ項目画面にある識別というボタンを押せば確認できます。
::setDPIのパス スケール ディスプレイID
C:\display_changer\display_changer\SetDpi.exe 200 1
おわりに
これで面倒な切り替えもダブルクリック一発でできるようになりました。快適。
もし動かないよーとかコードに間違い等指摘あればコメントいただければと思います。
コメント欄未実装のためXまたはgmailに連絡貰えれば解決できるかもしれません。