前提
.NET 6でTeamsのチャットを自動取得する機能を開発中です。(下図の赤枠部)
APIが使用できない環境下を想定し、P/InvokeやUI Automationでチャットの内容を取得しようとしているのですが、なかなか取得できません。
Inspect.exeで確認しましたが、ハンドルやクラスはアプリのウィンドウとその1つ下ぐらいまでしかなく、該当の部分はハンドルやクラス、AutomationIDは存在しない状況でした。(下図の赤枠部が取得したい例)
どのようにすれば、チャット部分のUI要素が取得できるでしょうか。
ツリーをどんどん深くするようにしないといけないのでしょうか。
※UI AutomationやP/Invokeはあまり触ったことがありません。
実現したいこと
- Teamsのチャットを取得できるようにする
試したこと
TeamsウィンドウやTeamsドキュメントはハンドルを持っているため、そのハンドルを使用しEnumChildWindowsを実施しても取得できませんでした。(ソースは消してしまいましたが、P/Invokeのまとまったページからコピペして実施しました)
UI Automationで、Teamsドキュメントのハンドルより取得したAutomationElementを使用し、その途中のAutomationIDを指定してもElementが取得できませんでした。
cs
1//P/Invoke 2[DllImport("user32.dll", SetLastError = true)] 3static extern IntPtr FindWindow(string lpClassName, string? lpWindowName); 4[DllImport("user32.dll", SetLastError = true)] 5public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr hWndChildAfter, string? className, string? windowTitle); 6 7//UI Automationの例 8IntPtr hWndTeamsLive = FindWindow("Chrome_WidgetWin_1", null); //Teamsウィンドウ 9IntPtr hWndTeamsDocument = FindWindowEx(hWndTeamsLive, IntPtr.Zero, "Chrome_RenderWidgetHostHWND", null); //Teamsドキュメント 10var elmTeamsDocument = AutomationElement.FromHandle(hWndTeamsDocument); //Teamsドキュメントのハンドルより、AutomationElementを取得 11var elm1 = mainForm.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.AutomationIdProperty, "message-pane-layout-a11y")); //ツリーの途中のAutomationID 12var elm2 = mainForm.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.AutomationIdProperty, "content-1665588609989")); //取得したい直前ぐらいのAutomationID 13//....
補足情報(FW/ツールのバージョンなど)
Visual Studio 2022
.NET 6
C#
Microsoft Teams バージョン 1.5.00.21668 (64 ビット)
※無料版です。
M365のTeamsでは動作確認できていませんが、Inspect.exeで確認する限り、パッと見は同じようでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。