質問が長くなって申し訳ありませんが、背景がないと「なぜ」を理解するのは難しいと思います。
背景: Windows Embedded Standard 7 環境で 2 つのアプリケーションを実行しています。これらは、マシン上で実行されている 2 つのアプリケーションのみである必要があります。1 つは「Controller」と呼ばれ、C++ で記述され、もう 1 つの「DBconnector」は C# で記述されています。これは新しいコードではありません。これは、ほぼ 20 年間にわたって積極的に使用および開発されてきました。
ソフトウェアの目的は、部品を製造するための製造機械を実行することです。これらのマシンは大きく、プログラムがクラッシュすると危険です。ずっと前に、何らかの理由でネットワークがダウンした場合、ネットワーク スレッドだけでなく、アプリケーション内のすべてのスレッドが停止することを発見しました。非常にまれな状況で間違ったリレーをオンにした状態でコントローラーを放置すると、マシンが文字通り爆発する可能性があるため、これは悲惨でした. 注: 現在、これを防止するために、ソフトウェアとハードウェアにいくつかの機能が追加されています。この危険はもはや存在しませんが、安定性は依然として非常に重要です。オペレーターがリセットボタンを押せない状態に陥ってほしくありません。当時の私の解決策は、ネットワーク タスクを別のアプリケーションに移動することでした。当時のOSはWindows XPベース。
2 つのプログラムの開発は分かれており、マシンを制御する Controller は極度の安定性を目的として設計され、もう 1 つの DBconnector はネットワークやほとんどのファイル I/O などの危険なことが発生する場所でした。2 つのプログラム間の通信は、両方がアクセスできるメモリ マップ ファイルを使用して容易になります。ウィンドウ ハンドル、プロセス ID、または 2 つのプログラム間で必要となる可能性のあるその他のデータを共有することに問題はありません。
これが私の質問です。 Controller アプリケーションに DBconnector の GUI を表示させるにはどうすればよいですか? たとえば、会社のサーバー上の Web サイトに保持されている品質管理シートを表示するために DBconnector を必要とする Controller に機能を追加し始めました。オペレータが品質管理シートをマシン上で直接引き出せるようにしてほしい。オペレーターは現在、コントローラー アプリケーションとのみ対話します。Controller がネットワークにアクセスできないようにしたくありません。また、C# には、Web ページを簡単に表示するためのツールがいくつかあります。これを行う場所はDBconnectorのようです。問題は、DBconnector がバックグラウンドで実行され、現在、ユーザーが表示またはアクセスできないことです。さて、問題はこれをどう解決するかです。
私が試した最初のオプションは、DBconnector に前に出て Controller をバックグラウンドに置くように指示することです。そして、ユーザーの操作が完了すると、Controller が前面に戻ります。いくつかのハックを使用してこれを機能させましたが、一貫性がありません。私が使用したトリックは、DBconnector を最小化してから最大化することでした。これにより、ほとんどの場合、DBconnector が前面に表示され、どちらかに焦点を合わせようとします。このようにする方法はまだあるかもしれませんが、一貫したものである必要があります。
2 番目のオプションは、コントローラのウィンドウの 1 つで DBconnector アプリケーションを実行することです。これを行う方法がわかりません。ATL や COM を使用することも考えましたが、これらは別のアプリケーションとしてではなく、コントローラー プロセス内のスレッドとして実行されると思います。
私が検討した 3 番目のオプションは、Windows メッセージ ハンドルを使用してすべてのユーザー入力メッセージをインターセプトして Dbconnector に直接渡すウィンドウを Controller 内に作成し、DBconnector が無効化されるたびにそのスクリーンショットを取得し、メモリ マップ ファイルを介して渡すことです。現在、これは私が揺れているものです。
最初と最後のオプションをより適切に実行する方法、または2番目のオプションをまったく実行する方法、または私が見逃した別の解決策について何か提案はありますか? 私たちの現在のハードウェアは Windows Embedded Standard 7 を実行していることに注意してください。プロジェクトは現在 Visual Studio 2015 にあります。C++ ウィンドウ テクノロジは、もともと 2003 年頃からライブラリを使用して実装された MFC だと思います。DBconnector は C# の .NET Framework 4 にあります。