2

私のWPFアプリケーション(システムトレイを介して実行されるだけ)からwin32 APIを掘り下げようとしています。

システム トレイ アイコンをクリックすると、ユーザーにコンテキスト メニューが表示され、最上位のウィンドウにフォーカスが移ります。

そのウィンドウ(フォーカスを失ったばかりのウィンドウ)へのハンドルを取得したいので、さまざまなアプローチを使用して試しました

GetForeGroundWindow()
GetTopWindow()
GetDesktopWindow()

しかし、果てしなく。私は現在、MainWindowHandles を取得し、すべてのウィンドウの z オーダーを確認するために、すべてのプロセスを反復処理することを検討しています。

しかし、もっと簡単で賢い方法があると思いました。古い Petzold の本からググったり思い出したりできないのは、ただ 1 つだけです。

もう 1 つの方法は、システム トレイ メニューがアクティブ化されたときにフォーカスを取得しないようにすることですか?

ありがとう!

4

2 に答える 2

2

ユーザーが最終的に選択するメニュー項目に関係なく、メニューを開くに一番上のウィンドウを取得できます。

次に、一番上のウィンドウが必要な場合は、メニューを開く前に取得した値を使用できます。

于 2009-03-11T09:25:23.237 に答える
0

説明した z-index 反復よりも単純なものはないと思います。システム トレイ メニューフォーカスを当てる必要があります。そうしないと、他のユーザーが (キーボードなどで) 使用できなくなるからです。フォーカスを取得すると、フォアグラウンド ウィンドウになるため、古いフォアグラウンド ウィンドウは、システム内の他のアクティブでないウィンドウと区別されることなく残されます。本当に、z-index チェック IMHO が唯一の方法です。

于 2009-03-11T09:24:44.597 に答える