powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Позднее связывание
18 сообщений из 18, страница 1 из 1
Позднее связывание
    #39777111
FeelYou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помочь с поздним связыванием UIAutomation
UIAutomationClient C:\WINDOWS\system32\uiautomationcore.dll
В референсах все подключить то работает...

Код: vbnet
1.
2.
3.
4.
Dim uiaObj As IUIAutomation
Dim uiaEle As IUIAutomationElement
Set uiaObj = New CUIAutomation
Set uiaEle = uiaObj.ElementFromHandle(ByVal hwnd)



И главное где посмотреть что написать вместо CreateObject("ИМЯ_БИБЛ.КЛАСС")

Код: vbnet
1.
2.
3.
4.
Dim uiaObj As Object
Dim uiaEle As Object
Set uiaObj = CreateObject("UIAutomationClient.IUIAutomation") ' не работает
Set uiaEle = CreateObject("ВОТ_ЗДЕСЬ.ЧТО_УКАЗАТЬ") ' ???



затупил, выручайте!
...
Рейтинг: 0 / 0
Позднее связывание
    #39777128
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FeelYouИ главное где посмотреть что написать вместо CreateObject("ИМЯ_БИБЛ.КЛАСС")реестр - HKEY_CLASSES_ROOT. Но бывает есть только clsid. ИМХО, позднее связывание отсутствует, могу ошибаться.

Описанной библиотекой не пользуюсь, проблемы с некоторыми методами, например ElementFromPoint .
Тестировал найденную на просторах инета библиотеку типов. Можно класть рядом и использовать раннее связывание.
...
Рейтинг: 0 / 0
Позднее связывание
    #39777130
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панургнайденную на просторах инета библиотеку типов
...
Рейтинг: 0 / 0
Позднее связывание
    #39777132
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FeelYouПрошу помочь с поздним связыванием UIAutomation

похоже тут без шансов ...

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/abf7dae4-63da-48d6-8218-fc77b0b878ac/late-binding-cuiautomation-in-vba-or-vbscript?forum=windowsaccessibilityandautomation I don't believe it's possible to call UIA objects from script, due to the lack of support for IDispatch by UIA. A related discussion is at
http://social.msdn.microsoft.com/Forums/en-US/windowsaccessibilityandautomation/thread/a10c5093-7777-43dd-aebc-a93925e8caf4.
http://social.msdn.microsoft.com/Forums/en-US/windowsaccessibilityandautomation/thread/a10c5093-7777-43dd-aebc-a93925e8caf4 I'm afraid there isn't a way to use it from VB Script. The new UIA COM API introduced in Windows 7 is usable from C++ clients and .NET clients (through COM interop), but the older IDispatch technology that VB script needs isn't implemented . We focused on the highest traffic interfaces: native C++ and .NET.

The only solution I can picture would be to build an IDispatch-compatible COM DLL, perhaps using ATL, that would take calls from your VB script and then call through to UIA. You wouldn't have to replicate the whole UIA API -- only as much as you were using. But this is still hard work.
...
Рейтинг: 0 / 0
Позднее связывание
    #39777135
FeelYou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, чертовщина
именно в реестре и смотрел по uiautomationcore.dll
есть и clsid и имя - UIAutomationClient, странно - обычный активикс вроде
уж очень удобная библиотека для доступа к элементам программ на .NET у которых нет окна
...
Рейтинг: 0 / 0
Позднее связывание
    #39777138
FeelYou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court, спасибо огромное, а то я уж начал думать, что совсем заработался..
...
Рейтинг: 0 / 0
Позднее связывание
    #39777169
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FeelYouименно в реестре и смотрел по uiautomationcore.dll
есть и clsid и имя - UIAutomationClient, странно - обычный активикс вродеВ реестре не описан класс CUIAutomation. Можно создать по UUID-у:
Код: vbnet
1.
2.
 Dim uiaObj As IUnknown
 Set uiaObj = CreateObject("new: {FF48DBA4-60EF-4201-AA87-54103EEF594E}")

, но толку не будет никакого, поскольку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    [
      uuid(FF48DBA4-60EF-4201-AA87-54103EEF594E),
      version(1.0),
      helpstring("The Central Class for UIAutomation")
    ]
    coclass CUIAutomation {
        [default] interface IUIAutomation;
    };}

- нет атрибута oleautomation и
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    [
      odl,
      uuid(30CBE57D-D9D0-452A-AB13-7AC5AC4825EE)
    ]
    interface IUIAutomation : IUnknown {
        HRESULT _stdcall CompareElements(
                        [in] IUIAutomationElement* el1, 
                        [in] IUIAutomationElement* el2, 
                        [out, retval] long* areSame);
...
    }

интерфейс наследуеЦЦа не от IDispatch, то есть нельзя написать
Код: vbnet
1.
Dim uiaObj As Object

(можно, но выполнение Set вызовет ошибку).

Собс-но, об этом уже написали.

А для того, чтобы понимать, что делать дальше и куды бечь, неплохо бы сформулировать хотелкиТЗ, включая ограничения (например, только VBA, только 32-битный, без использования в проекте сторонних библиотек типов и т. п.).
...
Рейтинг: 0 / 0
Позднее связывание
    #39777176
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа, если не трудно хотелось бы посмотреть реализацию
ЦЦатолько VBA

Панургс некоторыми методами, например ElementFromPoint .
...
Рейтинг: 0 / 0
Позднее связывание
    #39777232
FeelYou, а почему возникла необходимость в позднем связывании?
Отваливается ссылка на разных платформах?
...
Рейтинг: 0 / 0
Позднее связывание
    #39777238
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПанургЦЦа, если не трудно хотелось бы посмотреть реализацию
ЦЦатолько VBA

Панургс некоторыми методами, например ElementFromPoint .Ы.
Плохо написал. Под "только VBA" подразумевалось: "применимо в VBA, но не переносимо на VBS". Под эту же категорию попадает решение VBA+ссылка на библиотеку типов.

Тем не менее. Видимо, ты ожидаешь "только VBA без сторонних библиотек", и это можно сделать (хм, если вставки в машинных кодах считаюЦЦа за "только VBA"). Поскольку мы можем получить ссылку на корневой COM-объект с интерфейсом IUIAutomation (
Код: vbnet
1.
2.
 Dim uiaObj As IUnknown
 Set uiaObj = CreateObject("new: {FF48DBA4-60EF-4201-AA87-54103EEF594E}")

), мы имеем доступ к таблице виртуальных методов (vtbl) экземпляра COM-объекта и, имея описание интерфейса (номера в vtbl и сигнатуры) его методов из IDL, сгенерированного из библиотеки типов, можем дёргать (привет, радость вызова функции по адресу из VBA!) методы объекта. Пример здесь , в нём реализуюЦЦа вызовы для некоторых методов интерфейсов IDataObject и IStream.

Нужная инфраструктура (для VBA 32-битного) в том примере вроде есть, справишься (вроде для тебя не должно быть сложно)?

Но у меня есть вопрос (экзистенциальный) - азанахуа? Не являеЦЦа ли энтот UIAutomation обёрткой над IAccessible, и не проще ли сделать ссылку на объектную библиотеку Офиса, где IAccessible в адаптированном для VBA виде прекрасно, хоть и скрытно, живёт?
...
Рейтинг: 0 / 0
Позднее связывание
    #39777277
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦаПод эту же категорию попадает решение VBA+ссылка на библиотеку типов.такое есть, см выше. 21816082

ЦЦаНе являеЦЦа ли энтот UIAutomation обёрткой над IAccessible являеЦЦа. Проблема получить объект под курсором, когда он не совсем верхний. Например достучаться до контрола в субформе. Просто на форме - проблем нет, с помощью функции AccessibleObjectFromPoint
А вот с помощью IUIAutomation легко.
...
Рейтинг: 0 / 0
Позднее связывание
    #39777408
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПанургЦЦаПод эту же категорию попадает решение VBA+ссылка на библиотеку типов.такое есть, см выше. 21816082 То есть варианты с библиотекой типов в виде ресурса в исполняемом модуле, либо (того же ресурса, извлечённого из исполняемого модуля) в виде отдельного файла, не рассматриваюЦЦа как решения? OK. Тогда ломимся через vtbl, как описал.
ПанургЦЦаНе являеЦЦа ли энтот UIAutomation обёрткой над IAccessible являеЦЦа. Проблема получить объект под курсором, когда он не совсем верхний. Например достучаться до контрола в субформе. Просто на форме - проблем нет, с помощью функции AccessibleObjectFromPoint
А вот с помощью IUIAutomation легко.Основной метод получения элементов (не забываем, что IAccessible делался для альтернативных методов вывода информации (например, программа-рассказчик) для людей с ограниченными сенсорными возможностями; ясно, что такая программа не должна долбить каждый пиксель через AccessibleObjectFromPoint()) всё-таки методы навигации. Есть подтверждение, что IAccessible.accNavigate() не достукиваеЦЦа до контрола в субформе? Я не "топлю" за IAccessible, но хочеЦЦа знать, даёт ли UIAutomation какие-то конкретные преимущества, и, если да, в каких ситуациях?
...
Рейтинг: 0 / 0
Позднее связывание
    #39777453
FeelYou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий, есть машины на которых вертится XP/Server 2003 и довольно шустро хочу заметить, поэтому буду пробовать библиотеку из вложения Панурга.
UIAutomation не похожа на обертку IAccessible судя по документации, просто очень удобно дерево построено и обход по нему, при этом AccessibleObjectFromPoint ни разу не довелось использовать, обходился
Код: vbnet
1.
2.
3.
Set uiaCnd = uiaObj.CreatePropertyCondition(UIA_AutomationIdPropertyId, "mStatusStrip")
Set uiaCtl = uiaEle.FindFirst(TreeScope_Descendants, uiaCnd)
' или uiaObj.ContentViewWalker.GetFirstChildElement


Но можно и через MSAA, а она увидит не-оконные элементы .NET?
...
Рейтинг: 0 / 0
Позднее связывание
    #39777532
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЦЦаЯ не "топлю" за IAccessible, но хочеЦЦа знать, даёт ли UIAutomation какие-то конкретные преимущества, и, если да, в каких ситуациях?Сам себе и отвечаю:
Сравнение MS Active Accessibility и UI Automation
Утилита Inspect, позволяющая, в том числе, почувствовать разницу
Поддержка UI Automation в разных Windows
...
Рейтинг: 0 / 0
Позднее связывание
    #39777551
FeelYou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЦЦа, я уж обрадовался
https://support.microsoft.com/ru-ru/help/971513/description-of-the-windows-automation-api
отдельный компонент можно поставить для экспишки, хоть он и не доступен для скачивания
может обойдется установкой дотнет 3.0? сейчас стоит 2.5 в референсах нет UIA
пойду пробовать, всем еще раз благодарности за помощь
...
Рейтинг: 0 / 0
Позднее связывание
    #39777677
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦаЕсть подтверждение, что IAccessible.accNavigate() не достукиваеЦЦа до контрола в субформе?Вроде пробовал, но признал неудобным, точные результаты не помню, давно это было. UIAutomation оказалось удобней в данной ситуации.

ЦЦа Утилита Inspect, позволяющая, в том числе, почувствовать разницу Ну какбэ этим инструментом и пользовался для рассматривания что где и как.
...
Рейтинг: 0 / 0
Позднее связывание
    #39777678
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FeelYou, а ты для чего используешь? Так сказать в порядке деления опытом (вдрух это интересно, а я и не знаю!), коротенько. Можно и с примерами.
...
Рейтинг: 0 / 0
Позднее связывание
    #39777714
FeelYou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, для ХР компонент 971513 отдельно нашелся в КЦО, все работает
Применение неспецифическое, спрятать/показать объект в сторонней программе (теперь вижу, что через MSAA тоже можно было достучаться), конкретно сейчас доступ к программе автораспознавания номеров Автомаршалл на проходной. У дорогих редакций есть API, конкретно в этой на 2 камеры ничего нет. Можно в принипе слушать порт, номер кодируется в формат виганд плюс направление выезда + еще что-то неразобрал, только проще и удобнее смотреть строку состояния в которой все написано черным по серому. Раньше как то обходился FindWindowEx, но одельные блоки в статусной строке не имеют хендлов.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Позднее связывание
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]