2011-12-20 30 views
1

私のアプリケーションでは、別のアプリケーションのサイズが変更されているかどうかを判断するためにWindowsフックを使用しています。私は他のアプリケーションの新しいサイズに応じていくつかのアクションを取る。32ビットと64ビットの両方のアプリケーションをサポートするSetWindowsHook

純粋な32ビット環境と純粋な64ビット環境では正常に動作します(フックDLLは、MSDNのドキュメントとは別に64ビットと32ビットに準拠しています)。

ただし、ここに問題があります。 Window 64bit OSで32bitと64bitのアプリケーションが混在しているため、アプリケーションの64bit版を起動すると、32bitアプリケーションを監視できず、その逆もありません。

これを行うには良い方法がありますか?それはまったく異なる仕組みになります。

+0

どのようなフックを使用していますか? –

+0

WH_CALLWNDPROCRET ... – Saibal

+5

代わりにアクセシビリティフックを使用してください。 –

答えて

1

残念ながら、32ビットプロセスを32ビットプロセスに、64ビットDLLを64ビットプロセスにのみ注入できます。つまり、2つのバージョンのDLLが必要になります。これに加えて、SetWindowsHookEx()は同じ移植可能な実行可能ファイルファミリから呼び出さなければなりません(つまり、32ビットプロセスの場合は32ビットコードから呼び出し、64ビットプロセスの場合も同様です)。

アプリケーションが64ビットである場合、32ビットプログラムのインスタンスを起動し、フックを設定する必要があります。関心のあるイベントがトラップされたときにparentに通知するchildとしてこれらのいずれかを使用することをお勧めします。ドキュメントから

は、SetWindowsHookExは、別のプロセスにDLLを注入するために使用することができます。 A 32ビットDLLを64ビットプロセスにインジェクトすることはできず、64ビットDLL は32ビットプロセスにインジェクトでき​​ません。アプリケーションで が他のプロセスでフックを使用する必要がある場合は、32ビットの アプリケーションが32ビットDLLを32ビットの プロセスに注入するSetWindowsHookExを呼び出し、64ビットのアプリケーションコールSetWindowsHookExを使用して、 64ビットDLLを64ビットプロセスに変換する32ビットと64ビットDLLの名前はそれぞれ でなければなりません。

+0

ありがとう!それが私のやり方です...もっと洗練されたソリューションがあることを期待していました。 – Saibal

関連する問題