QResとSetDPIを用いて解像度と拡大率を変更するボタンを作る

#目的
4Kモニタを使っているが、APEXをプレイするには4Kだとマシンパワー不足なので毎回windowsの設定画面からFHDに切り替えている。これが若干ダルいのでもっと簡単に切り替えられるボタンを作る。

#用意するもの
- QRes
- SetDPI

###QRes
QResはコマンドラインから解像度を変更することができるようになるオープンソースソフトウェア。

参考: [Windows 10のデスクトップ解像度をコマンドラインで変更するには](https://denor.jp/windows-10%E3%81%AE%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E8%A7%A3%E5%83%8F%E5%BA%A6%E3%82%92%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E5%A4%89%E6%9B%B4)

上記の参考サイトを基に、64bitOSで動くバイナリを以下のリンクから入手し、任意のディレクトリにダウンロード、

[3 Ways To Change Screen Resolution In Windows 10](https://www.itechtics.com/change-screen-resolution/)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/c32abdf1-23c0-9e7f-48d7-d02f9bf93fc7.png"width=50%>
zipを展開すると以下の内容物のディレクトリができる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/716375a2-42be-c398-c8bb-a5e58f391b76.png" width=35%>

###SetDPI
SetDPIは画面の拡大率を変更することができるコンソールアプリケーション。

参考[【Windows】ワンクリックでできる! コマンドでディスプレイの表示倍率（スケール）を変更する方法](https://chiritsumo-blog.com/windows-screen-scaling/)

上記の参考サイトを基に、以下のリンクから最新版を入手し、任意のディレクトリにダウンロード。
https://github.com/imniko/SetDPI/releases

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/e9f4dbec-8da4-5006-f734-f7c3be87d7fe.png" width=70%>

zipを展開すると以下の内容物のディレクトリができる

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/f28a2434-747e-fe8c-2992-239845ed781b.png"width=45%>

#バッチファイルを組む
####実現する機能
FHDの際は拡大率100%(setDPIの操作はなし)
4Kの際は拡大率150%に指定する。

####書く内容
まず、QResのディレクトリに移動する。

~~~
@echo off
cd C:\Users\~~~~\Documents\QRes
~~~
解像度を指定する数字を _*input*_ で定義し、案内を表示する。ユーザに解像度を指定する数字を入力させる。

~~~
set input=
echo Please select display resolution 1:1920*1080  2: 3840*2160
set /P input=">>"
echo %input% was selected.
~~~
if文で入力された数字をチェックし、1の場合はFHDに、2の場合は4KになるようにQResを実行する。(Rはリフレッシュレート)

~~~
if %input%==1 QRes.exe /X 1920 /Y 1080 /R 60
if %input%==2 QRes.exe /X 3840 /Y 2160 /R 60
~~~
SetDPIの操作を記述する。
APP_PATHはSetDPIを展開したディレクトリとアプリケーションを指定、DIPSLAY_IDはディスプレイの番号(OSの識別から確認できる)、SCALE=VALUEで拡大率を指定。

~~~
set APP_PATH=C:\Users\~~~~\Documents\SetDPI\SetDPI.exe
set DISPLAY_ID=1
set SCALE_VALUE=150
~~~
if文で2(4Kにする時)が選択されたらスケール変更を実行するように記述。

~~~
if %input%==2 "%APP_PATH%" %DISPLAY_ID% %SCALE_VALUE%
~~~

####完成図
まとめで以下のようにして完成

~~~
@echo off
cd C:\Users\~~~~\Documents\QRes

set input=
echo Please select display resolution 1:1920*1080  2: 3840*2160
set /P input=">>"

echo %input% was selected.

if %input%==1 QRes.exe /X 1920 /Y 1080 /R 60
if %input%==2 QRes.exe /X 3840 /Y 2160 /R 60

set APP_PATH=C:\Users\~~~~\Documents\SetDPI\SetDPI.exe
set DISPLAY_ID=1
set SCALE_VALUE=150

if %input%==2 "%APP_PATH%" %DISPLAY_ID% %SCALE_VALUE%
~~~

#ボタン一つで起動できるようにする
バッチファイルはそのままではタスクバーに表示することができず、素早く起動できない。
タスクバーに表示できるようにする。
参考:[【Windows10】バッチファイルをタスクバーにピン留めする方法](https://note.z0i.net/2020/09/pin-batch-file.html)

####ショートカットの作成
ショートカットを作る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/f59f0e68-c0da-39ce-0c2d-6006dd3d8f50.png)

このままではタスクバーに表示できないため、プロパティを開き、パスの先頭に「cmd.exe c/」と入力して適用。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/bd65cfbe-dbb3-534b-b9a7-dcf2e71b5797.png"　width=80%>
この状態で起動したバッチファイルはタスクバーにピン留め可能となる。

####アイコンの変更
このままではアイコンがコマンドプロンプトのものになってしまってディスプレイ切り替えボタンっぽくないので、アイコンを変更する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/2ce5010a-52e1-ca59-51eb-5ffeaea3bd96.png" width=30%>

しかしこのままだとコマンドプロンプトの画像しか現れないので、システムのアイコンパッケージを参照する必要がある。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/e185a7da-df85-b219-1c89-00233be1a2f0.png" width=30%>

システムのアイコンは　__C:\Windows\System32__ にdllファイルの形でパッケージされている。
主に


- imageres.dll
- shell32.dll
- DDORes.dll
- setupapi.dll
- wmploc.dll

がアイコンのパッケージである。僕はディスプレイのアイコンを使いたかったのでそれが含まれているsetupapi.dllを参照。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/fb8d66fb-ebf4-a0fd-f7a0-e9d147e064f9.png" width=30%>

dllファイルを指定することでアイコンが選択可能になる。

####完成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990975/8a39b455-7c24-487d-097e-86499c983f60.png)

#おわり
4Kディスプレイを使っているミドルスペックPCゲーマーの皆さんはよかったら参考にしてください。
便利だと思います。