Я работаю над небольшим инструментом записи / воспроизведения макросов, который может автоматизировать несколько очень старых графических интерфейсов Visual Basic 6, которые у нас есть.Для этого я идентифицирую элементы управления по их имени (то есть по значению свойства name
элемента управления).
Одна часть этого инструмента должна определить имя данного элемента управленияего HWND.Для более новых приложений Visual Basic, которые были сделаны с использованием VB.NET, я могу использовать сообщение окна WM_GETCONTROLNAME .Это хорошо работает.
Однако, это сообщение не понято старыми окнами.Есть ли способ сделать это для элементов управления приложениями Visual Basic 6?Решение, которое не требует присутствия в процессе графического интерфейса, было бы предпочтительным, но если бы у меня было решение, которое работает только внутри процесса графического интерфейса, то это также было бы приемлемо (поскольку я могу выполнить инъекцию самостоятельно).
ОБНОВЛЕНИЕ: Одна вещь, которую я только что попробовал, этот умеренный успех: я использовал AccessibleObjectFromWindow , чтобы проверить реализации интерфейса IAccessible объекта, который показываетданный HWND.В случае, если я получаю реализацию (кажется, что многие [все?] Элементы управления Visual Basic реализуют этот интерфейс), я использую свойство accName для считывания «доступного имени».Иногда это дает полезную строку, но обычно это не так.