0

トレイ メニューを備えたアプリケーションがあり、トレイ メニューを含むいくつかのテストを自動化しようとしています。基本的に、トレイ メニューのアイテムを取得して、それらを操作する必要があります。ただし、アプリケーション内のメニュー項目をプログラムで取得する方法しか見つけられませんでした。しかし、私の自動化テストは外部アプリケーションになるので、それは役に立ちません。

外部アプリケーションのトレイ メニュー項目をプログラムで取得するにはどうすればよいですか?

4

3 に答える 3

1

外部アプリケーションのトレイ メニュー項目をプログラムで取得するにはどうすればよいですか?

それはいけません。通知アイコンへのアクセスを提供するパブリック API はありません。

于 2015-09-02T13:39:56.747 に答える
0

受け入れられると思われる仮定の種類に応じて、タスク バー ボタンのメニューが表示されたら、それをプログラムで操作できます。下の画像は、OneNote クリッピング ツール ボタンのメニューの Inspect SDK ツール レポート プロパティを示しています。(そして、メニュー項目は UIA Invoke Patten をサポートしていると言うので、UIA クライアント コードによってプログラムで呼び出すことができるはずです。)

トレイ ボタンのメニュー項目を呼び出したい場合は、UIA を使用して次の手順を検討してください。私がここで行う仮定は、あなたの状況には受け入れられないと感じるかもしれません。

  1. ルート メニューの直接の子である "NotifyIconOverflowWindow" というクラス名を持つ要素を見つけます。ボタンがオーバーフロー領域にあると想定しています。

  2. オーバーフロー要素の子を列挙し、ボタンの名前を持つボタンを探します。これは、UI 言語が既知であり、説明されていることを前提としています。

  3. ボタンの境界矩形を取得し、ボタンのマウスの右クリックをシミュレートします。UI が IUIAutomationElement3::ShowContextMenu() をサポートしていないことは間違いないため、クリック シミュレーションが必要です (ただし、いつでも試すことができます)。

  4. コンテキスト メニューが表示されたら、ルート要素の直接の子である ControlType a Menu、名前が「Context」の要素を見つけます。

  5. メニューを取得したら、メニュー内の子要素を列挙して項目を見つけ、必要な処理を行います。たとえば、メニュー項目の Invoke パターンを取得して呼び出します。

ここに画像の説明を入力

于 2015-09-15T01:20:15.703 に答える