1

通知領域アイコンを持つアプリケーションを作成しました。これをクリックすると、シングルクリック用に設計されたフォームが表示され、その後、ユーザーは以前に行っていた場所に戻ることができます。

現在、this.Hide()フォームを削除するために使用しています(フォームで目的のイベントが発生したとき、またはフォームがDeactivated. 通知領域アイコンをクリックする前に、ユーザーのフォーカスをウィンドウに戻すにはどうすればよいですか?

4

2 に答える 2

0

事後的にこれを理解しようとするのではなく、アプリが最初にフォーカスを受け取るときに最初に決定する必要があります。言い換えれば、それを理解するのは早ければ早いほど良いということです。

明らかな解決策は、WM_SETFOCUSまたはWM_ACTIVATEメッセージのいずれかを処理することです。これにより、以前にアクティブだったウィンドウへのハンドルが として渡されますlParam。残念ながら、これは同じスレッド内のウィンドウに対してのみ機能します。それ以外の場合は にlParamなりますNULL

WM_ACTIVATEAPPしたがって、非アクティブ化されているウィンドウを所有するスレッドの識別子を として渡すを使用する必要がありますlParam。スレッド識別子を取得したら、GetGUIThreadInfo関数を使用して、そのスレッドでアクティブなウィンドウを特定します。これは、どのプロセスがウィンドウを所有しているかに関係なく機能するため、WM_SETFOCUSおよびについて上記で説明した制限の対象にはなりませんWM_ACTIVATE

このウィンドウ ハンドルを追跡し、作業が終了したらフォーカスを戻すだけです。

于 2013-04-17T07:08:24.270 に答える