GUI が別のデバイスにストリーミングされる (リモート コントロールを許可する) Windows アプリケーションを作成したいと考えています。要点は、GUI I/O を分離するために Windows セッションの作成に頼りたくないということです (1)
これを実現するために、この前提を使用してリモート アクセスを有効にできるいくつかの既存のソリューションを観察し、どこから始めればよいかの手がかりを得ることができるかどうかを確認しました。
これらのソリューションの 1 つがWinflector です(ところで、2 つの接続までは無料です)。
このソリューションに興味を持ったのは、再描画された領域のみを検出しているように見えるからです (私は推測しています)。私の観察から得たものは次のとおりです。
- ストリーミングされたアプリケーションは、ログインしているのと同じセッションで「目に見えない」ローカルで実行されていますが (タスク マネージャーにアプリケーション プロセスが表示されます)、アプリケーション ウィンドウは作成されていないようです - 少なくともInspectはウィンドウを取得できませんアプリケーション プロセスの情報/ハンドル - 「GUI StdOut リダイレクト」のようなものです。
- どうやら、追加のデスクトップは作成されません。
- また、Mirror Driverがインストールされていないようです。
- Process Explorerを使用すると、Winflector が元のアプリケーション プロセスにいくつかのスレッドを追加することがわかりました。GUIのリダイレクトに関するものだと思います(スレッドの名前による)。
- アプリケーションは Winflector サーバーによって開始されます。つまり、CreateProcess 引数を制御します。
この場合に使用される可能性が最も高い手法は何ですか?
- Windows フック?
- Windows メッセージの傍受?
- 専用ディスプレイドライバー?
- メモリデバイスコンテキストの並べ替え?
同様のアプローチを取得するには、どこから調査を開始する必要がありますか? このテーマに関するオープンソース プロジェクトも大歓迎です。
PS: 私のプログラミング経験では、これは一種の「新しい世界」です。私の質問が冗長/明白/ナンセンスである場合は申し訳ありません。
(1) つまり、このアプリケーションは、IO を競合させることなく (たとえば、通常の VNC が行うように)、ローカル ユーザーが既にログインしている同じセッションを使用して、生成、ストリーミング、リモート クライアントとの対話を行うことができます。PS:現時点では、 出力のみに注目しています。