2 モニター構成では、一時的なマルチモニター マネージャー (TMM) ダイアログが生成されます。 2 つのターゲットが同じグラフィックス アダプターの一部である場合、TMM は、現在いずれかのターゲットにマップされている 1 つのソースを両方のターゲットにマップします。 TMM がマッピングを実行すると、TMM ダイアログがポップアップ表示されます。 ターゲットが異なるグラフィックス アダプター上にある場合は、2 番目のモニターをアクティブ化せずに TMM ダイアログが表示されます。 この状況では、TMM ダイアログには複製または拡張のオプションはありません。
次のシーケンスは、TMM が IViewHelper メソッドを呼び出し、この状況で他の操作を実行する順序を示しています。
TMM は、EnumDisplayDevices 関数を呼び出して、アダプター、ディスプレイ、およびモニターを含む現在の表示構成を取得します。 EnumDisplayDevices の詳細については、Microsoft Windows SDK のドキュメントを参照してください。
TMM は、以前に記録された表示構成と表示構成を比較します。
表示構成に、TMM が以前に検出したことがない拡張表示情報データ (EDID) を持つ 1 つまたは 2 つのモニターがある場合、TMM は TMM ダイアログを表示します。
TMM は、表示構成の各アダプターについて、IViewHelper::GetConnectedIDs メソッドを呼び出して、ソースがマップされているかどうかに関係なく、アダプター上のすべてのソースを取得します。
TMM は、IViewHelper::GetConnectedIDs メソッドを呼び出して、ターゲットがマップされているかどうかに関係なく、アダプター上のすべてのターゲットを取得します。 各ターゲットは接続されている必要がありますが、アクティブである必要はありません。
グラフィックス アダプター内の各ソースについて、TMM は IViewHelper::GetActiveTopology メソッドを呼び出して、ソースのアクティブなターゲットを取得します。
TMM は、ターゲットにマップされているソースを持つグラフィックス アダプターを検索します。 このソース識別子は "CloneSource" と呼ばれます。アダプターに 2 つのターゲットがある場合、TMM は 2 つのエントリの配列を作成します (ULONG targetArray[2])。 TMM は、既存のターゲット識別子を最初の要素として、2 番目のターゲット識別子を 2 番目の要素として配置します。
TMM は、指定されたパラメーターを使用して IViewHelper::SetActiveTopology(adapterName、CloneSource、2、targetArray) メソッドを呼び出します。
TMM は、IViewHelper::Commit メソッドを呼び出します。
IViewHelper メソッドからエラー結果が返された場合、コンピューターは複製ビューに入らず、TMM ダイアログが表示され、複製ビューと外部専用オプションが無効になります。
コンピューターが複製ビューに入り、ユーザーが TMM ダイアログから拡張ビューを選択した場合 ([OK] または [の適用] クリックした場合)、TMM は次のように複製ビューをオフにする必要があります。
TMM は、指定されたパラメーターを使用して IViewHelper::SetActiveTopology(adapterName、CloneSource、1、targetArray) メソッドを呼び出します。
TMM は、IViewHelper::Commit メソッドを呼び出します。
前の SetActiveTopology 呼び出しでは、パラメーター 3 は 2 ではなく 1 に設定されています。 このような状況では、SetActiveTopology は targetArray を1つの要素を持つ配列として解釈します。 SetActiveTopology は、2 番目のターゲットをオフにして、単一のビューに入ります。 次に、TMM は ChangeDisplaySettingsEx 関数を使用してディスプレイを拡張します。 ChangeDisplaySettingsExの詳細については、Microsoft Windows SDK のドキュメントを参照してください。
次の図は、2 モニター構成を行うためにモニターが追加されたときに TMM が状況を処理するときに発生する操作のフローを示しています。