Как получить доступ к элементам, которые пользовательский интерфейс Spy не видит, для автоматизации приложения win32 с помощью C#

Я делаю приложение формы окна C#, которое автоматизирует другое приложение win32, используя классы System.Windows.Automation.

Есть некоторые элементы, которые мне нужно прочитать или взаимодействовать, но UISpy не находит эти поля, он только нашел родительскую панель контейнера.

Например, этот блок кода ниже должен возвращать много кнопок панели инструментов, но не работает:

var mainWindow = AutomationElement.RootElement.FindChildByNamePart("Back Office Control");
var mainWindowChildren = mainWindow.FindAll(TreeScope.Children, Condition.TrueCondition);
var toolBarPanel = mainWindowChildren[1];
var toolBarItens = toolBarPanel.FindAll(TreeScope.Children, Condition.TrueCondition);

Есть еще один способ сделать это?

2 ответа

Решение

Как вы только что узнали, кнопки панели инструментов на самом деле не являются отдельными элементами управления в мире сообщений Windows. Это также относится к пунктам меню и некоторым другим элементам управления.

Чтобы вызвать щелчок с помощью сообщения Windows, вам нужно отправить WM напрямую на панель инструментов, а не кнопку, например TB_PRESSBUTTON ( http://msdn.microsoft.com/en-us/library/windows/desktop/bb787389(v=vs.85).aspx).

Вы должны использовать SendMessage Функция WinAPI, нацеленная на панель инструментов (вы можете получить hWnd как обычно), с TB_PRESSBUTTON в качестве типа сообщения, идентификатором команды как wParam и 1 как lParam.

Вам нужно использовать вызовы Win32 для достижения этой цели. GetWindow делает это

Справочная информация - http://msdn.microsoft.com/en-us/library/windows/desktop/ms633515%28v=vs.85%29.aspx

[DllImport("user32.dll")] public static extern int GetWindow(int hwnd,int wCmd); 
Другие вопросы по тегам