長年試行錯誤してやっと満足いく形になったかもしれない…。
Windows PCに接続している複数のモニタを用途に応じて一発でオン・オフできるようにしました。
目次
構成
昔はMacbook Pro一台のシンプルミニマル構成でしたが、ゲーミングPC買ってゲームもその他の作業もWindows PCでやるようになったら、いつのまにかPCに接続するモニタが4枚になりました。
実際はHDMIのケーブルを手でつなぎ替えて使ってるモニタ含めると5枚ある…。あの頃のミニマル主義はどこに…。

現状をDraw.ioでスケッチしてみました。こんな感じ。

右の2枚はPC作業用に27インチモニタを2枚。
(BenQ PD2700U/ ASUS PA27UCX)
左の2枚はゲーム用で65インチのテレビとサラウンド音声再生のためにDENONのアンプに接続しています。
(TCL 65C745 / DENON AVR-X1700H)
本筋からは外れるけどTVとアンプで別々に接続しているのは音声の遅延対策です。それがなければeARC機能でTV経由でアンプに音声流したり、アンプ経由でテレビに映像送った方がケーブル一本減ってシンプルにできます。
アンプに映像信号はいらないのですが、HDMIで音声だけ送るということは出来なさそうなので諦めてます(無駄なモニタが一枚認識される形になってしまう)。
モニタを用途によって使い分ける場合の問題点
このような接続は問題点がいくつかあります。
電源つけてないモニタにカーソルが行ってしまう
たとえばPC作業中にカーソルを画面の端まで持っていくと電源が入っていないTVの画面の方にマウスカーソルが行ってしまってカーソルを見失います。
アプリ起動しても電源オフにしているモニタでウィンドウが立ち上がって困る場合も。
モニタの配置が変わる場合がある
OSとモニタが通信したりしているようで、状況(モニタの電源のオンオフ?)によってモニタの配置が変わったりします。

「モニタの接続に基づいてウィンドウの位置を記憶する」の設定が関係してそうな気もしますが、OSからどのモニタが認識されているかどうかでモニタの配置が左右逆になったりとかする場合があり、そうなった場合に位置を正しくし直すのが面倒です。
GPUのメモリを消費する
モニタを接続する枚数が増えるとGPUの消費メモリが増加します。タスクマネージャーを見る限り1枚増えるとだいたい0.4GBぐらい消費してるようにみえます。
DaVinci ResolveでHDRを編集するとGPUメモリは8GBで足りるのか? | A-TAK a-tak.com
GPUメモリをたくさん使うDaVinci Resolveのようなソフト使うときは無駄にモニタが接続されていない方が望ましいですね。
Windowsのモニタ設定を一発で切り替えたい

ということで、作業に応じてWindowsに使うモニタだけ認識させたいのですが、標準のモニタ設定機能はチマチマ一つずつ設定が必要でなかなかにめんどくさい。プリセットとかあって瞬時に切り替えられたらいいのに。

そこで出てくるのがMultiMonitorToolというフリーのアプリです。

Enable/disable/configure multiple monitors on Windows Small tool for Windows that allows you to do some actions rel www.nirsoft.net
Windowsのモニタ設定をいじってくれるツールで今のモニタ設定情報をファイルに書き出したり読み込んだり、あとそれをターミナルから実行することもできるツールでまさに希望通りのものなんですが…これが、まあなかなかうまく動きません。
普通に考えると設定のパターンをそれぞれファイルに書き出して、随時それを読み込めば一発でモニタ設定の情報を切り替えられるはずなんですが、その通りにならないんですね。使い方の問題の可能性もありますがネットで探しても似たような状況の方、結構いらっしゃいます。
私も数年前からこのツールの存在は知っていて何度かチャレンジして結局上手くいかなかったのですが、やっと数年越しにまともな形にできたので、ここから具体的なやり方を説明していきます。
MultiMonitorToolのインストール
Enable/disable/configure multiple monitors on Windows Small tool for Windows that allows you to do some actions rel www.nirsoft.net
サイトのほぼ一番下の所に「Download MultiMonitorTool for x64 systems」のリンクがあるのでここからzipをダウンロードします。インストーラーなどはないので解凍して適当な所においておきます。
私は「C:\Program Files\multimonitortool-x64\」にコピーしました。
全部ONの状態の設定ファイルを書き出す
まずすべてのモニタがオンになっている状態で設定ファイルを作ります。
コピーした先のMultiMonitorTool.exeを実行するとMultiMonitorToolのUIが表示されます。

MultiMonitorToolのUIからモニタの有効・無効切り替えたりできるのですが、普段慣れているWindowsの設定画面でモニタをすべて有効にして、あとモニタの配置もお好みで設定します。

この状態でMultiMonitorToolの ファイル > モニタ設定の保存を選んで、どこか設定ファイルを書き出します。私はドキュメントの中にフォルダを作って保存しました。
Power Shellのスクリプトを作る
次にそれぞれの用途毎のモニタ設定にする為のスクリプトを作ります。MultiMonitorToolはGUIだけではなくコマンドで操作することもできます。Power Shellでスクリプト書いてみました。
- PC作業用に切り替えるスクリプト
- ゲーム用に切り替えるスクリプト
PC作業用スクリプト pc-on.ps1
テキストエディタで上記の内容で拡張子をps1で保存しました。
2行目の最初のパスはMultiMonitorTool.exeをコピーした場所を記載しています。
そのあとの「/LoadConfig」の後には最初にMultiMonitorToolで作成した全部モニタON状態の設定ファイルを書き出した場所を選んでいます。
私は「D:\Documents\GitHub\MultiMonitorTool\all-setting.cfg」に保存したのでそれを指定しています。
まずはすべての画面をオンにした状態から不要な画面を無効にしていく作戦ですね。
次の「Start-Sleep 17」は17秒間スクリプトの処理を一時停止するコマンドです。
このスリープ時間が非常に重要で、これが短いと設定が反映されず設定が元に戻ったりします。
たぶんですけど、Windowsの設定画面でモニタの設定を変更したときも「反映して良いか?」の質問を数秒放置すると元の設定にもどりますが、あれと同じような事が起きているように見えます。
Windowsの設定画面で手動でモニタのオン・オフを切り替えたときに結構画面が出てくるまで時間がかかると思うのですが、それにかかる時間と同じぐらいの秒数をここで指定したがよいです。
また、これが短すぎて処理に失敗すると以後、MultiMonitorToolからの制御ができなくなります。その場合はWindowsの設定の方で何かモニタの設定を一度変更すると再度MultiMonitorToolで操作できるようになります。
頑張って制御が正しく行えて、かつあまり待たなくても済むスリープ時間をこの後に書いてある実行方法で実際に動かしてトライ&エラーで導いてください。
7行目12行目の「/disable」ではゲームでしか使わないテレビとアンプの接続を切断しています。
「/disable」の後に記載しているのはモニターIDです。
モニターIDはMultiMonitorToolで対象のモニタを右クリックしてプロパティを表示すると確認できます。ここをコピーして貼り付けましょう。

最後の「/SetPrimary」の行はメインディスプレイの設定をしています。アプリを立ち上げた場合にメインディスプレイに指定したモニタに表示される場合が多いです(アプリによる)。
ゲーム用スクリプト game-on.ps1
PC作業用スクリプトの逆バージョンですね。
一旦全部のモニタをオンにして今度はPCのモニタを無効に切り替えて行っています。
スクリプトの実行と調整
保存したスクリプトを実行するとどのアプリで開くか聞かれるのでPowerShellを選びます。
PowerShell本体は場所が分かりづらいですが、「”C:\Program Files\PowerShell\7\pwsh.exe”」とかにあると思います。なければ頑張って探して…。
上にも書いていますが、環境によっては設定が切り替わってるように見えるけど、最終的に元の状態に戻ったりする場合があるかと思います。
処理に失敗すると以後、MultiMonitorToolからの制御ができなくなります。その場合はWindowsの設定の方で何かモニタの設定を一度変更してください。
そしてStart-Sleepの後の数字を大きくして「待つ」時間を長くしてください。
モニタの状態によっては結構切り替えに時間がかかるので、長めに設定して置いた方が無難です。
一度うまくいくように調整すれば、以後はスクリプトを実行するだけで切り替えが簡単にできるようになります。
トラブルシューティング
おそらく環境によってはこれでもうまくいかないケースがあるかもしれないです。何かのヒントになるかもしれないので気をつけるべき点を書いておきます。
スリープは十分な時間を確保
各コマンドの間にいれてある「Start-Sleep」の後の待ち秒数は環境や各モニタの状況によって変動がありそうです。繰り返しになりますが、実際にモニタの設定を変更して画面が出てくるまでの時間ぐらいは確保したがよいです。
無効な操作はWindowsが元に戻そうとする
例えば無効な状態のモニタをメインディスプレイにしようとしたりすると元に戻されたりしてるように見受けられます(ちゃんと確認してないのですまんけど)。
コマンドの順番に気をつけてください。
モニタIDで指定する
上の例ではMultiMonitorToolでモニタを指定する際に長ったらしいモニタIDを指定しいますが、DISPLAY1のように短い形式での指定もできます。ただこれは状況によって番号が変動するので使わない方がよさけです。モニタIDを指定しましょう。
失敗したらWindowsの設定で設定を変更してトライ
これも上に書いてますがMultiMonitorToolで制御に失敗すると以後MultiMonitorToolでの制御を受け付けなくなります。
一度Windowsの設定で画面の設定を変更してあげましょう。
物理スイッチで操作する STREAM DECK

スクリプト作ったはよいもののモニタをオフにしたりするので画面みながらマウスでスクリプト実行するのはきびしい事もあって、結局モニタに依存しない切り替えスイッチが別途必要だなと思いました。
PCで作業しようと電源入れたけどTVの方に映像いくようになってたので何も画面が映らないというときも、ボタン操作でPCモニタに画面が表示されるように出来ますし。
そんなわけでうちにあるSTREAM DECKにボタン設定してみました。

システム > 開くをボタンに配置して、さきほど作ったスクリプトを指定するだけです。

こんな感じでボタンを押して画面切り替えられるようにしました。
今回の記事とは直接関係ないですけど、「Audio Switcher」というプラグインで音声もアンプなのかPCのスピーカーなのかを切り替えできるようにしているので、すぐにPCゲームができるようになりました(笑)
28,980円 (2025年02月28日 12:09時点 詳しくはこちら) Amazon.co.jpで購入する
Logicool MX Creative Consoleから操作する

同じ事なんですが、MX Creative Consoleでも同じ事やってみました。
OPEN > ファイルを開くで同様にスクリプト選べばOKです。


29,800円 (2025年02月28日 12:10時点 詳しくはこちら) Amazon.co.jpで購入する
モニタ切り替えが非常に楽になりました
PCでそこまでゲームはしないんですが、気になるゲームが発売される度にモニタ切り替えの自動化にチャレンジしうまくいかず諦める、みたいなのを数年繰り返していたんですが、やっと思った通りにできるようになりました。
最近PC版インディージョーンズをやりはじめて、またこの件にぶちあたったのですが、快適にゲーム開始できるようになりました。感無量。
「インディ・ジョーンズ 大いなる円環」、かなり面白いです。インディ・ジョーンズの新作映画みてるような気持ちになります。PCとXBOXだけなんですが良いGPU搭載しているPCお持ちの方は是非プレイしてみてください。

21,663円 (2025年02月28日 12:18時点 詳しくはこちら) Amazon.co.jpで購入する
↑Amazonには高い限定版しかないけどSteamには安い通常版あるよ。
それでは!