1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【マルチモニタ】モニタ配置を記憶して切り替えられるソフト「MultiMonitorTool」

Last updated at Posted at 2023-10-25

はじめに

モニタを3枚以上使っている、かつモニタを2枚以上別デバイスで共有している人向けの需要が薄いであろう記事です。

環境

自宅ではモニタを4枚使っていて、それぞれメインモニタ、サブモニタ1、サブモニタ2、サブモニタ3とします。
メインPCでは全てのモニタを使用、PS5ではメインモニタを使用、サブPCではメインモニタとサブモニタ1を使用しています。

前座

メインPCとPS5を同時に使用すると、PC側ではメインモニタは接続されている扱いなので、メインモニタに表示されているものは見えなくなってしまいます。
image.png

この場合の解決方法は簡単で、win+Pのショートカットで「セカンドスクリーンのみ」を選択すればPCからの出力はサブモニタのみになります。
powershellで実行したい場合はDisplaySwitch 4を実行すればよいです。

本題

さてそれでは本題ですが、メインPCとサブPCを同時に使っている場合です。
下記の図のようにサブPCではメインモニタとサブモニタ1を使い、メインPCではサブモニタ2,サブモニタ3を使っています。
image.png

この場合にはメインPC側でサブ1とメインモニタの接続を切りたいところですが、それをするには設定画面を開いて一つずつ切断する必要があります。
更にメインモニタをメインディスプレイにしている場合は先にサブ2かサブ3をメインディスプレイに設定してからでないとメインモニタを切断できません。

流石に毎回それをやるのは面倒くさすぎるので何か方法はないだろうかと探したところ見つけたのが「MultiMonitorTool」でした。

どんなソフト?

マルチモニタの管理を行えるソフトです。
モニタ配置の保存、画面オフ、モニタの無効化等を行えます。
概要に関してはフリーソフト100さんを見るのが良いと思います。
MultiMonitorTool のダウンロード・使い方 - フリーソフト100

公式サイトには各種コマンドが乗っているのでこちらも目を通しておくと良いと思います。
Enable/disable/configure multiple monitors on Windows

このソフトはコマンドがかなり充実しているのでバッチファイル化して一括でディスプレイ設定を変えることが可能…なのですが
少々癖が強く普通に使っていると詰まることがかなり多そうなので実際に使っているスクリプトを使用して解説していきます。

ただ使用しているモニタ、PCスペックなどによってかなり差が出ると思われるので参考程度にしたほうが良いとは思います…

また、このソフトとDisplaySwitchでの拡張やセカンドスクリーン等との併用は出来ません。1

スクリプト

サブ1とメインモニタの接続を切るスクリプト

まず最初にサブ1とメインモニタの接続を切るスクリプトですが、以下になります。

DISPLAY3とDISPLAY1の画面サイズを0にする(Width=0 Height=0)ことによって切断している
S:\Programs\multimonitortool\MultiMonitorTool.exe /SetMonitors "Name=\\.\DISPLAY3 Primary=0 `
BitsPerPixel=32 Width=0 Height=0 DisplayFlags=0 DisplayFrequency=60 DisplayOrientation=0 `
PositionX=-1920 PositionY=0" `
"Name=\\.\DISPLAY1 Primary=0 BitsPerPixel=32 Width=0 Height=0 DisplayFlags=0 `
DisplayFrequency=60 DisplayOrientation=0 PositionX=0 PositionY=0"

長ったらしいですが大事なのは/SetMonitorsWidth=0 Height=0です。
/SetMonitorsはモニタごとに設定を変更するコマンドです。
公式サイトを見ると変更したい項目だけ記載すれば良さそうな感じですが、すべての項目を埋めないと動きませんでした。2

それを使ってNameが\.\DISPLAY3であるモニタと\.\DISPLAY1であるモニタの解像度を0にすることでそのモニタを非表示にしています。
disableというモニタを無効にするコマンドもあるのですがそちらを使うとどうもうまくいかなかったのでこの方法でやっていますが、disableがうまく行くならそっちでやったほうがキレイで良いと思います。

すべてのモニタに接続するスクリプト

次にすべてのモニタに接続するスクリプトです。

S:\Programs\multimonitortool\MultiMonitorTool.exe /setmax "MONITOR\IOD1904\{4d36e96e-e325-11ce-bfc1-08002be10318}\0023"
S:\Programs\multimonitortool\MultiMonitorTool.exe /setmax "MONITOR\GSM5AB8\{4d36e96e-e325-11ce-bfc1-08002be10318}\0006"
S:\Programs\multimonitortool\MultiMonitorTool.exe /enable "MONITOR\GSM5AB8\{4d36e96e-e325-11ce-bfc1-08002be10318}\0026"
S:\Programs\multimonitortool\MultiMonitorTool.exe /setmax "MONITOR\GSM5AB8\{4d36e96e-e325-11ce-bfc1-08002be10318}\0026"
S:\Programs\multimonitortool\MultiMonitorTool.exe /setmax "MONITOR\EVE0001\{4d36e96e-e325-11ce-bfc1-08002be10318}\0024"

Start-Sleep 1

S:\Programs\multimonitortool\MultiMonitorTool.exe /SetPrimary "MONITOR\EVE0001\{4d36e96e-e325-11ce-bfc1-08002be10318}\0024"

Start-Sleep 1

S:\Programs\multimonitortool\MultiMonitorTool.exe /LoadConfig "S:\Programs\multimonitortool\extend.cfg"

ここで使っているsetmaxですが、これは対象のモニタの解像度をそのモニタの最大解像度にするというコマンドです。
前述のSetMonitorsで0にした解像度をここで戻すことで接続するようにしています。3

また、こちらではディスプレイの指定方法をNameではなくMonitorIDにしていますが、これも何故かNameで指定したら上手く行かなかったのでこうしています。

「MONITOR\GSM5AB8~\0026」についてはenableをした後にsetmaxしていますがこれも意図して書いたもので、このモニタはこう書かないと何故か動きませんでした…

Start-Sleepで1秒停止した後にSetPrimaryを使ってEVE0001をメインディスプレイにしていますが、ここで停止を挟まないと上手くメインディスプレイが切り替わりませんでした。4

LoadConfigというのはモニタの配置などを読み込むコマンドです。
MultiMonitorToolでディスプレイ設定をするとモニタ配置が初期化されてしまうので、予め保存しておいたモニタ設定を読み込むようにしています。

セカンドスクリーンのみに表示するスクリプト

最後にセカンドスクリーンのみに表示するスクリプトです。

S:\Programs\multimonitortool\MultiMonitorTool.exe /setmax "MONITOR\EVE0001\{4d36e96e-e325-11ce-bfc1-08002be10318}\0024"

Start-Sleep 1
S:\Programs\multimonitortool\MultiMonitorTool.exe /enable "MONITOR\GSM5AB8\{4d36e96e-e325-11ce-bfc1-08002be10318}\0026"
S:\Programs\multimonitortool\MultiMonitorTool.exe /setmax "MONITOR\GSM5AB8\{4d36e96e-e325-11ce-bfc1-08002be10318}\0026"

S:\Programs\multimonitortool\MultiMonitorTool.exe /disable "MONITOR\EVE0001\{4d36e96e-e325-11ce-bfc1-08002be10318}\0024"

Start-Sleep 1

S:\Programs\multimonitortool\MultiMonitorTool.exe /LoadConfig "S:\Programs\multimonitortool\second.cfg"

ここがかなり難関だったのですが、「MONITOR\GSM5AB8~\0026」に対してsetmaxやenableを行っても何故かEVE0001に接続されるというよくわからない現象が発生していました。

なので無理やりの解決策として、
EVE0001に接続 →「MONITOR\GSM5AB8~\0026」に接続(ここでも一時停止しないと上手く行かなかった)→ EVE0001を切断 → LoadConfigで配置設定
という手順を踏んでいます。

まとめ

使いこなすのは難しそうですが、薄い需要に対してやりたいことが出来る貴重なソフトでした。
上手く動かないときはとりあえずStart-Sleep 1を挟んで置けばいいんじゃないかなぁって感じですかね…

今回の使用方法以外にもマルチモニタを使ううえで便利な機能が入っているのでモニタがいっぱいある人は一回見てみて損はないソフトだと思います。

  1. DisplaySwitchの切断とMultiMonitorToolでの切断は違うっぽい?のですがよくわかりません…

  2. おま環かもですが…

  3. こちらもdisable、enableで事足りるならそっちを使ったほうが良いと思います。

  4. EVE0001は画面の切り替わりが遅いのでそれが原因ぽいです

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?