Windows環境で「いまマウスカーソルが乗っているUI要素の情報」を取得したいケースがあります。例えば、ブラウザ上でリンクにマウスオーバーしているときに、その要素のテキストやヒント情報を取得したい場合です。
ここでは UI Automation API をPowerShellから利用して、カーソル直下の要素を定期的に取得・表示する方法を紹介します。
手順概要
PresentationCore / PresentationFramework / WindowsBase / UIAutomationClient を読み込みます。
user32.dll の GetCursorPos を呼び出し、スクリーン上のカーソル位置を取得します。
AutomationElement.FromPoint() を使うことで、UI Automation要素を取得できます。
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を検討しましょう。