私はWin32 SetParent()の呼び出しを使って別のアプリケーションのメインウィンドウを再作成するC#WPFアプリケーションを開発しています。このアウトオブプロセスの子ウィンドウへのハンドルは、HwndHostから派生したFormHostという名前のクラスによってラップされます。 1つのことを除いて、すべて正常に機能しています。元のウィンドウのメッセージはFormHostには配信されません。 MSDNのドキュメントには、HwndHostウィンドウプロシージャWndProc()をアウトプロセスウィンドウで使用できないことが明確に記載されています。代わりに、MessageHookも動作しません。私はAttachThreadInput()を呼び出して、2つのウィンドウの入力処理を結合することも試みました。運がない。助言がありますか?他のプロセスからのウィンドウのメッセージの処理
1
A
答えて
2
ウィンドウを元に戻すプロセスは、アウトオブプロセスウィンドウのメッセージプロシージャを直接サブクラス化できません。ウィンドウの所有プロセスのアドレス空間に独自のウィンドウプロシージャコードを注入し、そのアドレス空間内のウィンドウをサブクラス化し、最後に必要に応じて再作成プロセスに通信するために選択したIPCメカニズムを使用する必要があります。実際の注射のために
、次のいずれかを実行します
1)DLLに実際のウィンドウプロシージャのコードを入れて、ウィンドウの所有プロセスにDLLをロードした後、DLLのDllEntryPointを持ってCreateRemoteThread()を使用します( )ウィンドウをサブクラス化します(HWNDハンドルをグローバルメモリに格納して、DLLが見つけられるようにする必要があります)。
2)VirtualAllocEx()とWriteProcessMemory()を使用して、ウィンドウの所有プロセスのアドレス空間内に割り当てられたメモリブロックに実際のウィンドウプロシージャコードを入れてから、CreateRemoteThread()を使用してウィンドウの実際のサブクラスを実行するそのメモリブロックをウィンドウプロシージャとして使用します。
関連する問題
- 1. 他のプロセスからのマウスイベントの処理
- 2. 複数のプロセスの処理の処理
- 3. cgiのプロセス処理
- 4. ストリーム処理とメッセージ処理の違い
- 5. セレンのshowModalDialogウィンドウの処理
- 6. プロセスのエラー処理C#
- 7. Linux - プロセス処理の終了
- 8. データ処理プロセスのオフロード
- 9. WCFからの未知のsoapメッセージの処理
- 10. ストリーム処理後のカフカトピックからのメッセージの削除
- 11. メッセージの順次処理
- 12. メッセージの並行処理
- 13. rabbitmqメッセージの処理concurrenrtly
- 14. Vert.xの逐次処理メッセージ
- 15. MFCメッセージ処理のトレース
- 16. RabbitMQ Spring AMQP - しばらくしてからのメッセージ処理
- 17. React Native Websocket別のコンポーネントからのメッセージを処理します。
- 18. 同期から非同期のJMSメッセージ処理への変更
- 19. 子アクターからのメッセージのみを処理する方法は?
- 20. ウィンドウレスのC#プロセスでのWM_イベントの処理
- 21. JMSメッセージの並列処理ですか?
- 22. 削除する方法メイクプロセスからのメッセージを「処理を終了」またはelispのコードでプロセスを開始
- 23. C - プロセス間のイベントの処理
- 24. は、プロセス内のファイルの処理は、C++
- 25. Firemonkey - メッセージ処理
- 26. すべてのウィンドウからWM_TOUCHメッセージを取得し、自分のAPPで処理しています
- 27. スイングで別のGUIウィンドウからイベントを処理する方法
- 28. SendMessageからのメッセージは、他のウィンドウをペイントさせるはずですが、
- 29. IEウィンドウ内のActiveXコンポーネントの処理
- 30. Javaでのウィンドウの処理と終了
upvoted - いい答え。ただし、DEPがオンになっている場合、オプション2はWindows Vista以上で動作しますか? – quixver
nvm - VirtualProtectExではメモリ保護も設定できます。 – quixver