1

フラッシュベースのUIを制御するためのC++(Qt)ベースのアプリケーションを構築しています。フラッシュランタイムは膨大な量のメモリをリークするため、C++で記述されたコマンドアンドコントロールアプリとは別にスタンドアロンのフラッシュプレーヤーにロードされた.swfとしてUIを実行します。

C ++は、適切なパラメーターを使用して外部プロセスとしてFlash Playerを起動し、ローカルホストに接続されたTCPソケットを介してFlashPlayerと通信します。

アプリケーションは主にWindowsXP以降で実行されます。

Flash Playerをスタンドアロンで実行することの不幸な副作用は、2つのアプリケーションがAlt + tabリストとWindowsのタスクバーに表示されることです(1つはアプリケーションで、もう1つはFlash Playerです)。さらに、アプリケーションは全画面で実行されるため、フラッシュは画面全体を管理する必要があります。C ++アプリが画面の一部を描画できるようにすることは、大幅な改善になります。

独自のアプリケーションを制御したまま、どういうわけか2つをマージしたいと思います。私はGoogleChromeに沿って何かを考えています。これは、すべての出力を1つのウィンドウに表示しながら、各ブラウザータブを別々のプロセスで実行しているように見えます。

これを達成することさえ可能かどうかを判断するために、私はWin32 API(およびgoogle)を読んでいます。これまでのところ、私は唯一の半実行可能な解決策としてdllインジェクションを考え出しましたが、その計画Bを検討したいと思います。

任意の提案をいただければ幸いです。

4

3 に答える 3

2

WS_EX_TOOLWINDOWAlt + Tabリストには、表示され、拡張スタイルを持たない最上位(親なし)のウィンドウが表示されます。したがって、2つのプロセスから2つのウィンドウがあり、Alt-Tabリスト(およびタスクバー)に1つだけ表示したい場合は、いくつかのオプションがあります。

  1. WS_EX_TOOLWINDOWをウィンドウの1つに追加します。

  2. ウィンドウの1つを非表示のトップレベルウィンドウに再ペアレント化します。

  3. 一方のウィンドウ(おそらくFlashプレーヤー)をもう一方のウィンドウに再ペアレント化します。これは注意が必要ですが、Chromeや他の多くのマルチプロセスシングルウィンドウアプリの動作方法である可能性があります。トリッキーなのは、ウィンドウの存続期間を処理し、メッセージキューを誤ってシリアル化することです。

于 2009-12-29T16:54:16.660 に答える
0

この質問とその回答は、あなたの質問に関連していると思います 。C++またはJavaアプリケーションにFlash Playerを埋め込むのですか?

于 2009-12-29T16:34:33.813 に答える
0

DLLインジェクションはどこにも到達しません。フラッシュプレーヤーをインプロセスサーバーとしてインスタンス化する場合、メモリはメインプロセスに割り当てられます。
メモリリークを制御し続けたい場合は、FlashPlayerを別のプロセスに保つ必要があります。

あなたの現在のアプローチは実行可能に聞こえますが、あなたの唯一の問題は、プロセスがまだAlt + Tabリストのようなものに表示されていることです...私が覚えている限り、拡張ウィンドウスタイルを設定するWS_EX_TOOLWINDOWとそれが役立つはずです。
タスクバーからプロセスを非表示にするには、たとえばここを参照してください。

于 2009-12-29T16:44:11.783 に答える