リモートデスクトップを最小化すると GUI 自動操作が止まる理由と対策 — RDP クライアントの描画抑制を接続元で無効化する
リモートデスクトップのウィンドウを開いている間は自動操作が動くのに、最小化すると止まる。Windows のリモート環境で RPA や GUI テスト、AI による Computer Use を動かしていると、この挙動に当たることがあります。接続先のサーバーが止まっているわけではなく、画面取得や前面化、クリック・入力の一部だけが期待どおりに動かない、というのが典型的な症状です。
Windows のリモートデスクトップ接続は RDP(Remote Desktop Protocol)で行われ、接続元 PC では標準の リモートデスクトップ接続(mstsc.exe)が RDP クライアントとして動いています。以降、プロトコルを指すときは「RDP 接続」、クライアントアプリを指すときは「RDP クライアント」と書きます。最小化する対象を指すときは「リモートデスクトップのウィンドウ」と書きます。
原因の一つに、RDP クライアントがウィンドウ最小化時に行う描画関連の最適化(描画抑制)があります。この影響は RPA、GUI テスト、Computer Use に共通して起こり得ますが、どこまで影響するかは実装と実行環境によって変わります。接続元 PC のレジストリ値 RemoteDesktop_SuppressWhenMinimized を 2 に設定すると、この描画抑制が緩和されて改善する場合があり、Microsoft と UiPath の公式ドキュメントでも案内されています。本記事では、公式資料で確認できる仕組み、設定手順、動作確認の進め方、そしてこの設定で解決しない状態を順に整理します。
起きる現象
RDP 経由で自動操作を動かしているときに観察される典型的な症状は、次のようなものです。
- リモートデスクトップのウィンドウを開いている間は、画面取得や前面化、クリックや文字入力が通る。
- 同じ接続のまま、リモートデスクトップのウィンドウを最小化すると、画面取得が同じ画像を返し続ける、対象ウィンドウを前面に出せない、クリック・キー入力が反応しない、といった形で自動操作だけが失敗する。
- 接続先 PC で既に走っているサービスやバッチ処理は止まっていない。
ここで区別しておきたいのは、「接続先 PC の処理全体が止まる」ことと「GUI 自動操作が成立しなくなる」ことです。前者はサービス側の問題、後者は接続元 RDP クライアントの描画や入力周りの状態に引きずられた問題で、本記事が対象にしているのは後者です。
同じ現象は、RPA の無人実行、UI 要素ベースの GUI テスト、スクリーンショットを使う Computer Use でも起こり得ます。ただし、影響の出方は次のような要素で変わります。
- 画像ベースで操作するか、Windows の UI Automation などで UI 要素を直接取得・操作するか。
- 対象アプリが描画を止めても通知だけで動くタイプか、画面の内容を読み取る必要があるタイプか。
- 自動操作ツールが対象ウィンドウの前面化・フォーカス制御をどこまで行うか。
同じ最小化操作でも、画像ベースの処理は画面が更新されない影響を直接受けやすく、UI 要素ベースの処理は実装次第で動くこともあります。「最小化すると必ず前面ウィンドウがなくなる」「すべての UI Automation が止まる」といった一般化はできません。
なぜ起きるのか
RDP クライアントはウィンドウが最小化された際に、転送・描画コストを下げるために表示関連の処理を抑制します。Microsoft の Power Automate 向けトラブルシュート記事は、最小化された RDP ウィンドウを UI 自動化の失敗要因の一つに挙げ、RemoteDesktop_SuppressWhenMinimized を 2 に設定する手順を案内しています。UiPath Robot のドキュメントにも「Minimized RDP window interference」として、同じ値名・同じ値の設定が記載されています。
描画抑制が入ると、自動操作に次のような影響が出ることがあります。
- 画面取得(スクリーンショット): 最小化中は画面の更新が止まり、取得される画像が最後に表示されていた内容のまま、または空の内容になる。
- 前面化・フォーカス: 最小化中のウィンドウに対する前面化やフォーカス移動が期待どおりに届かない。
- マウス・キーボード入力: 物理入力をシミュレートする方式では、座標計算や前面化が前提となる操作が失敗する。
これらの影響は、どのレイヤで自動操作が成立しているかで変わります。画面の画像に基づく操作は、表示されるピクセルそのものに依存するため、最小化による描画抑制の影響を直接受けやすい領域です。一方、UI Automation を使って UI 要素のプロパティや位置を取得し、API 経由でクリック・入力を送る方式は、描画していなくても動くことがあります。ただし、ツールが実装の中で物理入力やスクリーンショットを併用している場合、全体としては最小化の影響を受けます。詳細は使用している自動操作ツールのドキュメントで確認してください。
Computer Use は、現時点では画面のスクリーンショットをモデルに渡し、座標ベースでクリックや入力を行う実装が中心です。したがって、同じ描画抑制が原因であれば、本記事で紹介する設定で改善することが期待できます。ただし、Computer Use の実装はクライアントごとに異なるため、すべての環境で有効・必須と断定することはできません。
対策の設定値
共通して案内されているレジストリ値は次のとおりです。
| 項目 | 値 |
|---|---|
| 値の名前 | RemoteDesktop_SuppressWhenMinimized |
| 種類 | DWORD(32 ビット) |
| 値 | 2 |
設定対象は、リモートデスクトップのウィンドウを開いている接続元 PC です。接続先のサーバーではありません。UiPath のドキュメントでも「Robot 側ではなく、Robot に RDP で接続している PC」に対して設定するよう注記されています。
この設定は、Windows 標準の RDP クライアント(mstsc.exe)を対象として案内されています。特定の RPA 製品や自動操作ツールが独自に参照する値ではなく、RDP クライアントそのものの挙動に影響する設定です。UiPath や Power Automate は、同じ設定を公式ドキュメントで案内している例として挙げられています。別の RDP クライアント(他社製クライアント、Windows App など)に同じレジストリ値が効くかどうかは、各クライアントの資料で確認してください。
64 ビット OS でも、作成する値の種類は DWORD(32 ビット)です。64 ビット版のレジストリ値ではないことに注意してください。
設定手順
設定先のキーは、資料によって案内が異なります。Microsoft のトラブルシュート記事は次の 1 箇所を案内しています。
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client
UiPath のドキュメントは、HKCU と HKLM の両方、さらにそれぞれの通常パスと Wow6432Node 配下の計 4 箇所を案内しています。
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server ClientHKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server ClientHKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server ClientHKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client
どこか 1 箇所で足りるのか、複数箇所に設定する必要があるのかは、資料からは明確には読み取れません。これは RDP クライアントの実装詳細と、Windows の WoW64 におけるレジストリリダイレクションの扱いに関わる話なので、推測では埋めずに、まずは自分の環境に合うスコープで最小限に設定し、動作を確認することを推奨します。目安としては次のとおりです。
- 自分(1 ユーザー)だけに適用したい場合: HKCU 配下のキー。
- 同じ接続元 PC を使う全ユーザーに適用したい場合: HKLM 配下のキー。
- Microsoft の資料どおりに合わせたい場合: HKLM の
Wow6432Node配下。 - UiPath のドキュメントどおりに「どこに読みに行っても効くようにしたい」場合: 列挙された 4 箇所すべて。
いずれの場合も、適用前に次の点を済ませておきます。
- レジストリをバックアップする: 対象キーを右クリックして「エクスポート」を選び、
.regファイルとして保存しておきます。全体をバックアップする手順は Microsoft のレジストリのバックアップ案内に従います。 - 既存値を記録する: 対象の値が既に存在する場合は、現在の種類と値を控えておきます。変更後に元に戻すときに必要です。
- 既存の RDP セッションを閉じる: Microsoft の資料は、変更前にアクティブな RDP セッションを閉じるよう案内しています。設定変更の反映タイミングを安定させるためにも、RDP クライアントを終了してから操作します。
値の作成
GUI で操作する場合は、regedit を接続元 PC で管理者として起動し、対象キーに移動して次を行います。
- 右ペインの空いている場所を右クリックし、「新規」→「DWORD(32 ビット)値」を選択。
- 値の名前を
RemoteDesktop_SuppressWhenMinimizedにする。 - 作成した値をダブルクリックし、「値のデータ」に
2を入力して OK。 - レジストリエディターを閉じる。
コマンド例を使う場合は、接続元 PC 上で、設定したいスコープに応じた権限で実行します。HKCU は実行ユーザー自身の権限で、HKLM は管理者権限で起動したコマンドプロンプトや PowerShell を使います。reg コマンドで HKCU の通常パスに書き込む例は次のとおりです。
reg add "HKCU\Software\Microsoft\Terminal Server Client" ^
/v RemoteDesktop_SuppressWhenMinimized /t REG_DWORD /d 2 /fHKLM の Wow6432Node 配下(Microsoft の資料で案内されている場所)に書き込む場合は、管理者権限で次のように実行します。
reg add "HKLM\Software\Wow6432Node\Microsoft\Terminal Server Client" ^
/v RemoteDesktop_SuppressWhenMinimized /t REG_DWORD /d 2 /f書き込み後、RDP クライアント(mstsc.exe)を一度終了して再接続します。実行中の RDP セッションに対して値が自動で反映されるとは限らないため、必ず切断・再接続して試します。
設定値の確認
設定後、同じ reg コマンドで値を読み取り、REG_DWORD の値が 0x2 になっていることを確認します。
reg query "HKCU\Software\Microsoft\Terminal Server Client" ^
/v RemoteDesktop_SuppressWhenMinimized元に戻す
元に戻す際は、変更前に値が存在していた場合と、新規に作成した場合で手順を分けます。
- 変更前にも値があった場合: 控えておいた元の種類と値を同じ名前で書き戻す。たとえば以前が
0だったなら、/d 0で上書きします。 - 新規に作成した場合: 値自体を削除する。
reg delete "HKCU\Software\Microsoft\Terminal Server Client" ^
/v RemoteDesktop_SuppressWhenMinimized /f削除後も、RDP クライアントを再起動してから挙動を確認してください。
動作確認
設定の効果を見るときは、設定前と設定後で条件をそろえて比較します。少なくとも次の条件は固定したうえで、ウィンドウを「表示したまま」と「最小化した状態」で同じ操作を流します。
- 接続元 PC、接続先 PC、使用する RDP クライアントとバージョン。
- 自動操作ツールとそのバージョン、スクリプトまたはフローの内容。
- 画面解像度、スケーリング、マルチモニター構成。
- 対象アプリの起動状態、ログイン状態、画面のレイアウト。
確認のポイントは、画面取得だけでなく、使っている操作方式に必要な前後の処理まで含めることです。
- 画面取得が成功するだけでなく、連続して取得した画像が更新されているか(タイムスタンプや動的な要素で区別できるように、サンプルアプリに時計やカウンターを置いておくと分かりやすい)。
- 自動操作ツールが前面化やフォーカス移動を行う実装なら、それが成功しているか。
- クリック・キー入力が、対象ウィンドウで想定どおりの UI 変化を起こすか。副作用のない操作(ボタンのフォーカス移動、空欄への無害な文字列入力など)で確認する。
検証には業務データを直接変更しないサンプルアプリを使います。たとえば、Windows メモ帳、電卓、もしくは自前の小さな WPF・WinForms アプリで、ボタンを押すとラベルが更新されるものを用意すれば、画像とイベント発生の両方を同時に観察できます。
設定前と設定後で記録した結果は、使用した Windows のバージョン、RDP クライアントのバージョン、自動操作ツールのバージョン、接続構成(セッションの解像度、ウィンドウモード、マルチモニターの有無など)とともに残しておきます。未検証の内容を「改善した」「改善しなかった」と書かないことが、後から他のメンバーが参照したときの判断材料になります。
対策の限界
RemoteDesktop_SuppressWhenMinimized は、あくまで「リモートデスクトップのウィンドウを最小化したときの描画抑制」に対する設定です。次の状態は、ウィンドウの最小化とは別の問題であり、この設定では解決しません。
- RDP セッションの切断(ネットワーク断、
mstsc.exeの終了など)。 - 接続先 PC のロック画面やログイン画面。
- サインアウト(ログオフ)。
- 接続元・接続先 PC のスリープ、ディスプレイのオフ。
これらは接続状態そのものが失われたり、対話セッションが対象アプリの描画を行える状態でなくなったりする問題なので、別の対策(セッション維持、自動ロックやスクリーンセーバーの無効化、電源プランの調整など)を検討する必要があります。これらは本記事の対象外です。
他の RDP クライアント(他社製クライアント、Windows App など)や、別の OS(macOS・Linux 上のクライアント)で同じレジストリ値が有効かどうかは、公式資料で確認できる範囲では明確ではありません。各クライアントの資料や設定を確認してください。
また、設定の効果を上げたいからといって、自動操作ツール側の対象ウィンドウ確認や安全な停止処理を無効化することは推奨しません。これらは誤操作を検出するための仕組みなので、無効化すると別の障害が入り込む余地が増えます。
設定後も改善しない場合は、本設定とは別の原因を疑います。切り分けの観点は、ドキュメントで確認できる範囲に限定して挙げると次のとおりです。
- 接続状態: 最小化ではなく切断・ロックになっていないか。
- 権限: 対象アプリが管理者権限で起動しており、自動操作側がそうでないなど、UIPI による制限に当たっていないか。Microsoft のトラブルシュート記事は、昇格されたアプリへの操作も失敗要因として挙げています。
- 画面取得・入力方式: 自動操作ツールが画像ベース・UI 要素ベース・物理入力の何を使っているか、ツールのドキュメントで前提条件を確認する。
本設定と無関係な対策を思いつくままに試すと、何が効いたのか・何が元に戻せるのかが分からなくなるので、1 つずつ条件をそろえて検証するのが安全です。
以上、リモートデスクトップのウィンドウを最小化すると RPA・GUI テスト・Computer Use が止まる現象について、原因となる RDP クライアントの描画抑制と、接続元 PC で RemoteDesktop_SuppressWhenMinimized を 2 に設定する対策、そしてその限界を整理した、現場からお送りしました。