
外出先からMoonlightで自宅のWindows PCを使うため、Virtual Driver Control(VDD Control)を入れ、普段の物理4枚と外出用の仮想1枚をMultiMonitorTool経由のBATで切り替える環境を作ってみた。
仮想1枚へ切り替えるところまでは比較的スムーズだったが、問題は物理4枚への復帰。モニターの指定方法・Primary・CFGを読み込む順番でかなりハマった。
最終的には2本のBATで正常に切り替えられ、スタートから呼び出せる状態まで仕上がった。根本原因は未特定だが、今はこの方法で常用できている。
作れた切り替え環境

|
状態 |
使用するモニター |
切り替え方法 |
|
通常時 |
物理モニター4枚 |
4KをPrimaryにして使用 |
|
外出時 |
仮想モニター1枚 |
仮想モードBAT |
|
利用後 |
物理モニター4枚 |
4枚復帰BAT |
Primaryは、Windowsでメインとして扱うモニターのこと。通常時は4K物理モニターをPrimaryにしている。
外出するときは仮想モニターを有効化してPrimaryへ変更し、物理4枚をまとめて無効化する。Moonlightから使う画面は仮想2560×1600だけになる。
戻すときは物理4枚を有効化し、4KをPrimaryへ戻してからモニター配置を復元。最後に仮想モニターを無効化する流れだ。
今回の到達点
原因を完全に解明したわけではない。今回のPCで安定して切り替えられた順番をBATへ固定し、実用上使える状態にした。
仮想モニターを準備

仮想モニターにはVirtual Driver Control(VDD Control)を使った。
導入直後は800×600で認識されることがあった。VDD ControlのXML Editorで不要な解像度を削除し、MacBook Airで使う用に2560×1600・60Hzで使える状態にした。

仮想モニターのShort Monitor IDはMTT1337だった。これはモニターを表す短い識別名で、後ほど仮想モニターを無効化するときにも使う。
この状態でSunshine+Moonlightから仮想2560×1600を表示できた。
仮想モードBAT

外出用へ切り替えるときは、次のBATを使っている。
@echo off
REM MultiMonitorTool
set MMT="C:\USERS\ROOT\APP\multimonitortool-x64\MultiMonitorTool.exe"
REM Full Monitor ID
set VERTICAL1="MONITOR\PHLC154\{4d36e96e-e325-11ce-bfc1-08002be10318}\0000"
set VERTICAL2="MONITOR\PHLC154\{4d36e96e-e325-11ce-bfc1-08002be10318}\0005"
set QHD="MONITOR\PHLC337\{4d36e96e-e325-11ce-bfc1-08002be10318}\0004"
set VDD="MONITOR\MTT1337\{4d36e96e-e325-11ce-bfc1-08002be10318}\0002"
set MAIN4K="MONITOR\PHL08E1\{4d36e96e-e325-11ce-bfc1-08002be10318}\0006"
REM 1. 仮想モニターをON
%MMT% /enable %VDD%
REM 認識待ち
timeout /t 2 /nobreak > nul
REM 2. 仮想モニターをPrimaryにする
%MMT% /SetPrimary %VDD%
REM Primary切替待ち
timeout /t 2 /nobreak > nul
REM 3. 物理モニター4枚を一括でOFF
%MMT% /disable %VERTICAL1% %VERTICAL2% %QHD% %MAIN4K%
exit
そのままコピーはできない
MultiMonitorToolの保存場所・Monitor IDは俺の環境の値になっている。自分の環境で確認して置き換える必要がある。
処理する順番
BATの流れは次のとおり。
先に仮想モニターを有効化し、Primaryへ切り替えてから物理4枚を消している。
物理モニターを1台ずつ無効化すると、そのたびにWindowsのディスプレイ再構成が走る。そこで最終版では、4枚を1回の/disableでまとめて処理する形に変えた。
IDは自分の環境に合わせる
最初はShort Monitor IDへ統一しようとしたが、縦モニター2台がどちらもPHLC154になっていた。

同じIDでは個別指定できないため、仮想モード側はモニターを個別に識別する長いFull Monitor IDを採用した。
4枚復帰でハマった

|
試した方法 |
今回の結果 |
最終版での扱い |
|
Full Monitor IDで物理4枚を戻す |
後続処理が効かない場合あり |
不採用 |
|
/SetMonitorsで4枚構成を復元 |
物理4枚が復帰せず |
不採用 |
|
DISPLAY1~DISPLAY4を一括で有効化 |
物理4枚は安定して復帰 |
最終版で採用 |
仮想モードではFull Monitor IDが使えたため、復帰側も同じ方式へそろえようとした。ところが物理4枚を戻した後、Primary変更や仮想モニターの無効化などが効かない場合があった。
MultiMonitorToolの「Copy /SetMonitors Command」で正常な4枚構成を取得し、/SetMonitorsも試したが、こちらも物理4枚は復帰しなかった。
原因は未特定だが、以前の復帰BATでは物理4枚そのものは安定して戻せていた。そこで指定方法の統一をやめ、動いていたDISPLAY1~DISPLAY4の一括有効化へ戻した。
4枚復帰BAT

最終的に正常復帰できたBATはこれだ。
@echo off
REM MultiMonitorTool の場所
set MMT="C:\USERS\ROOT\APP\multimonitortool-x64\MultiMonitorTool.exe"
REM 5枚構成CFGの場所(英数字名)
set CFG="C:\USERS\ROOT\APP\multimonitortool-x64\5mon.cfg"
REM 1. 物理モニター4枚を一気にON
%MMT% /enable "\\.\DISPLAY1" "\\.\DISPLAY2" "\\.\DISPLAY3" "\\.\DISPLAY4"
REM 物理モニターの認識・再構成を待つ
timeout /t 5 /nobreak > nul
REM 2. DISPLAY4をPrimaryにする
%MMT% /SetPrimary "\\.\DISPLAY4"
REM Primary変更後の再構成を待つ
timeout /t 2 /nobreak > nul
REM 3. 以前の成功BATと同じ書き方で5mon.cfgを読み込む
%MMT% /LoadConfig %CFG%
REM 4. 最後に仮想5をOFF
%MMT% /disable MTT1337
exit
CFGは、MultiMonitorToolで保存したモニター配置設定のこと。今回使っているのは、物理4枚と仮想1枚を含む構成を保存した5mon.cfgだ。
Primaryを先に戻す
復帰側で重要だったのは、CFGを読み込むタイミングだった。
俺の環境ではDISPLAY4が4K物理モニターになっている。4KがPrimaryではない状態でCFGを読んでも、配置は正常に戻らなかった。
CFGを先に読むのではなく、物理4枚を認識させてから4KをPrimaryへ戻し、その後にCFGを読む。この順番で物理4枚の通常配置まで復帰できた。
DISPLAY番号は環境依存
検証中に4KやVDDのDISPLAY番号が変わることもあった。DISPLAY4を固定値としてまねせず、自分の環境で対象モニターを確認した方がいい。
CFGは英数字名にした
最初は5枚.cfgという日本語名を使っていた。Primaryの変更までは成功するのに、/LoadConfigが効かなかった。
そこで同じCFGを5mon.cfgへ変更したところ、読み込みに成功。物理4枚の配置復元から仮想モニターの無効化まで、すべて通るようになった。
最終的に使った5mon.cfgと2本のBATは、同じフォルダに置いている。

画面内の5枚.cfgやコピー版は検証途中の旧ファイルで、成功手順に使うのは5mon.cfg。
以前にも4枚.cfgから4mon.cfgへ変えたときに同じような結果が出ている。ただし、日本語名が使えない仕様だと確認できたわけではない。
あくまで今回の環境では、日本語名で読み込めず、英数字名へ変えると成功したという実測になる。
スタートから起動

2本のBATが動いても、毎回エクスプローラーやWindows検索から探すのは面倒だった。
Windows 11ではBATファイルをそのままスタートへ固定できなかった。そこでBATのショートカットを作り、Win + Rでshell:programsを開いて、そのショートカットをスタートメニュー用のフォルダへ配置した。

あとはスタートから「仮想モード」「4枚復帰」と検索すれば、そのまま起動できる。

手順は次のとおり。
Win + Rを押すshell:programsと入力して開く普段の使い分け

自宅のAndroidタブレットから接続するときは、通常どおり物理モニターを表示する。Sunshineも普段見る物理モニターの表示IDへ戻している。

Sunshine側の設定。表示したいモニタを設定できる。
外出時だけスタートから「仮想モード」を実行し、物理4枚を消して仮想2560×1600をMoonlightから利用。終わったら「4枚復帰」を実行して元へ戻す。
音声はSteam Streaming Speakersを有効化している。Moonlightの「ストリーミング中にホストPCのスピーカーをミュートする」は、使う端末に合わせて切り替えている。

現在の運用
自宅は物理モニター・外出時は仮想モニター。切り替え後の状態に合わせ、スタートに置いた2本のBATを使い分けている。
復帰BATはDISPLAY番号に依存し、根本原因も未特定。Monitor IDの指定方法も統一できていない。
それでも、物理4枚ON→4KをPrimary→英数字名のCFG読込→VDD OFFという順番なら正常に戻せた。BATを作って終わりではなく、スタートから呼び出せるところまで整えたことで、今は普段使いできる状態になっている。
使用したソフトウェア
今回の環境で使用したソフトウェアは以下の4つ。




コメント