2009-05-20 25 views
3

システムトレイにあるアプリケーションを開発しており、アクティブなウィンドウでアクションを実行できます。しかし、システムトレイのアイコンをクリックすると、GetForegroundWindow()がタスクバーを返します。タスクバーの前にアクティブだったウィンドウを取得する必要があります。最後に起動したウィンドウのウィンドウハンドルを取得する

私はEnumWindowsGetWindowでデスクトップウィンドウを列挙しようとしましたが、これはデスクトップガジェットやその他のアクティブなアイテムが最後にアクティブになることが多いためです。それは可能ですか、またはウィンドウが非アクティブになったときに情報が完全に失われましたか?

答えて

2

この情報を取得する唯一の方法は、WH_CALLWNDPROCにシステムワイドフック(SetWindowsHookEx)をインストールし、すべてをキャプチャすることです。WM_ACTIVATEAPPです。これにより、いつどのウィンドウがアクティブになったかの完全な履歴を追跡することができます。

+0

これは本当にうまくいきます。しかし、私は64ビット(あるいは私が64ビット用にコンパイルすると32ビット)なので、影響を受けないアプリケーションについては問題があります。何か案は? –

+0

私は32ビットと64ビットの両方のDLLをフックすることができますし、2つのプロセス間通信のいくつかの並べ替えを使用するが、非常に乱雑に見えます。 –

+0

残念ながら私はそれを行うためのきれいな方法はないと思うので、2つのDLLといくつかのIPCはASFAIKに行く唯一の方法です。 –

関連する問題