1

を使用して通知領域(別名「システムトレイ」)にアイコンを追加するアプリケーションがありますShell_NotifyIcon。アイコンには、さまざまな重要なコマンドを含むコンテキスト メニューがあります。アプリがローカル システムで実行されている場合、コンテキスト メニューは正常に機能します。ただし、アプリがターミナル サービスのRemoteAppとして実行されている場合、アイコンを右クリックしてもコンテキスト メニューは表示されません。コンテキスト メニューを開くためのさまざまなキーボード ベースの方法も機能しません。

アイコンをダブルクリックしても期待どおりに動作するので、完全に壊れているわけではありません。ただし、コンテキスト メニューも同様に機能する必要があります。誰が何が間違っているのか知っていますか?

編集:もう1つの情報:Ctrl + Alt + Endを押してWindowsセキュリティ画面(ログオフ、セッションのロックなどを可能にする)を開き、その画面を閉じると、コンテキストメニューが機能し始めます.

4

1 に答える 1

1

これはWM_CONTEXTMENU、RemoteApp の場合、アプリケーションが通知を受信しないために発生するようです。といつものようWM_RBUTTONDOWNWM_RBUTTONUP通知が届きますが、それだけです。奇妙なことに、キーボードでコンテキスト メニューをアクティブにしようとすると、マウスが関与していないにもかかわらず、WM_RBUTTONDOWNとも表示されます。WM_RBUTTONUPCtrl+Alt+End を押すと、この問題が解決するようです。WM_CONTEXTMENUシステムは通常の通知の送信を開始します。私の推測では、これはリモート デスクトップ クライアント プロセスのバグです。

潜在的な修正の 1 つは、 を使用してコンテキスト メニューをトリガーすることですWM_RBUTTONUPが、キーボードのアクセシビリティが損なわれるため、お勧めしません。

私が解決した回避策は次のとおりです。

  1. 通知が表示されたらWM_RBUTTONUP、短いタイムアウト (50 ~ 100 ミリ秒) のタイマーを設定します。
  2. 通知が表示されたらWM_CONTEXTMENU、タイマーをキャンセルしてコンテキスト メニューを表示します。
  3. タイマーが起動したら、タイマーをキャンセルしてコンテキスト メニューを表示します。

これは、ローカルでの使用と RemoteApp の使用で機能するはずです。手順 1 のタイムアウト値は、WM_CONTEXTMENU が入る前に期限切れにならないように、十分に長くする必要があります。

于 2011-03-02T20:38:24.440 に答える