通知領域アイコンを持つアプリケーションを作成しました。これをクリックすると、シングルクリック用に設計されたフォームが表示され、その後、ユーザーは以前に行っていた場所に戻ることができます。
現在、this.Hide()
フォームを削除するために使用しています(フォームで目的のイベントが発生したとき、またはフォームがDeactivated
. 通知領域アイコンをクリックする前に、ユーザーのフォーカスをウィンドウに戻すにはどうすればよいですか?
通知領域アイコンを持つアプリケーションを作成しました。これをクリックすると、シングルクリック用に設計されたフォームが表示され、その後、ユーザーは以前に行っていた場所に戻ることができます。
現在、this.Hide()
フォームを削除するために使用しています(フォームで目的のイベントが発生したとき、またはフォームがDeactivated
. 通知領域アイコンをクリックする前に、ユーザーのフォーカスをウィンドウに戻すにはどうすればよいですか?
事後的にこれを理解しようとするのではなく、アプリが最初にフォーカスを受け取るときに最初に決定する必要があります。言い換えれば、それを理解するのは早ければ早いほど良いということです。
明らかな解決策は、WM_SETFOCUS
またはWM_ACTIVATE
メッセージのいずれかを処理することです。これにより、以前にアクティブだったウィンドウへのハンドルが として渡されますlParam
。残念ながら、これは同じスレッド内のウィンドウに対してのみ機能します。それ以外の場合は にlParam
なりますNULL
。
WM_ACTIVATEAPP
したがって、非アクティブ化されているウィンドウを所有するスレッドの識別子を として渡すを使用する必要がありますlParam
。スレッド識別子を取得したら、GetGUIThreadInfo
関数を使用して、そのスレッドでアクティブなウィンドウを特定します。これは、どのプロセスがウィンドウを所有しているかに関係なく機能するため、WM_SETFOCUS
およびについて上記で説明した制限の対象にはなりませんWM_ACTIVATE
。
このウィンドウ ハンドルを追跡し、作業が終了したらフォーカスを戻すだけです。