Windows環境で「いまマウスカーソルが乗っているUI要素の情報」を取得したいケースがあります。例えば、ブラウザ上でリンクにマウスオーバーしているときに、その要素のテキストやヒント情報を取得したい場合です。

ここでは UI Automation API をPowerShellから利用して、カーソル直下の要素を定期的に取得・表示する方法を紹介します。


手順概要

  1. UI Automationを使えるようにする

PresentationCore / PresentationFramework / WindowsBase / UIAutomationClient を読み込みます。

  1. カーソル座標を取得する

user32.dll の GetCursorPos を呼び出し、スクリーン上のカーソル位置を取得します。

  1. その座標からAutomationElementを取得

AutomationElement.FromPoint() を使うことで、UI Automation要素を取得できます。

  1. 要素の情報を表示する

ControlType(ボタン、テキストなど)

Name(ユーザーに見えるラベルやテキスト)

HelpText(ヒントや追加情報)

LegacyIAccessible.Value(古いアプリで使われる値。URLなどが入ることもある)


実際のコード

以下のコードをPowerShellコンソールに貼り付けて実行すると、マウスを動かすたびにカーソル下の要素情報が出力されます。


実行例

ボタンにカーソルを合わせると:

Type=ControlType.Button
Name=OK
HelpText=

LegacyValue=

ブラウザのリンクにカーソルを合わせると:

場合によっては Name にリンクテキストが入り、LegacyValue や HelpText にURLが入ることもあります。

ただし、Chromium系ブラウザ(Edge, Chromeなど)はセキュリティの関係で href を直接取れないことが多いです。


注意点

取得できる情報はアプリによって異なる

IEや古いアプリではURLなどが取れる場合があります。

Edge/Chrome/FirefoxはURLを返さないことが多いです。

補助的な用途に向く

「テキストラベルやボタンのキャプションを取得する」には有効です。

「ブラウザのリンク先URLを正確に取る」には別の方法(DevTools Protocolなど)が必要です。


まとめ

UI Automationを利用すると、マウスオーバー中の要素情報をPowerShellで簡単に取れる。

テキストやボタン情報の収集に便利。

ただし、モダンブラウザのリンクURL取得には向かないので、確実にURLが必要ならブラウザのデバッグAPIを検討しましょう。

Previous Post Next Post