У меня возникают проблемы с попыткой идентифицировать с помощью Windows UI Automation кнопки, которые находятся внутри окна области уведомлений (имя класса: ToolbarWindow32):
Я проверил с помощью инструментов автоматизации Windows UI, развернутых в SDK Windows, что эти "значки" являются элементами управления типа ControlType.Button
, однако, когда я пытаюсь запустить код ниже, я получаю исключение с использованием NULL, потому что условие поиска я использование не получает никакого контроля.
Я делаю что-то неправильно, или, может быть, я нашел какое-то ограничение в Windows UI Automation?
Это код, я смешал его с вызовами WinAPI, чтобы облегчить задачу для вспомогательных пользователей, которые, возможно, предпочитают использовать эту методологию.
Dim tskBarClassName As String = "Shell_TrayWnd"
Dim tskBarHwnd As IntPtr = NativeMethods.FindWindow(tskBarClassName, Nothing)
Dim systrayBarClassName As String = "TrayNotifyWnd"
Dim systrayBarHwnd As IntPtr = NativeMethods.FindWindowEx(tskBarHwnd, IntPtr.Zero, systrayBarClassName, Nothing)
Dim ntfyBarClassName As String = "ToolbarWindow32"
Dim ntfyBarHwnd As IntPtr = NativeMethods.FindWindowEx(systrayBarHwnd, IntPtr.Zero, ntfyBarClassName, Nothing)
Dim window As AutomationElement = AutomationElement.FromHandle(ntfyBarHwnd)
Dim condition As New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button)
Dim button As AutomationElement = window.FindFirst(TreeScope.Descendants, condition)
MsgBox(button.Current.Name) ' Here throws the null-reference exception.
Любое решение для этого?