Что нового

Невозможность работы AutoIt с некоторыми элементами управления

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Спешу воспользоваться советом модератора и открыть тему, посвященную элементу управления TVirtualStringTree, по поводу которого тут уже было сказано, что AutoIt он, к сожалению, не по зубам. Хотелось бы высказать некоторые предположения по данному поводу. Как мне кажется, этот виртуальный, что следует из его названия, элемент вообще не содержит в себе данных, логическим следствием чего и является невозможность добиться их от него. Можно предположить, что он является неким проводником между тем, что отображается на экране и физическим источником информации, например, базой данных. Он является как бы посредником, который получив запрос, адресует его базе данных и выдает информацию. Сам же в себе ничего не хранит. Вот если бы удалось каким-либо образом добраться до его методов, тогда возможно и получилось бы чего-либо добиться. Сейчас ситуация выгляди так: попытки обратиться к нему при помощи арсенала средств, имеющихся в распоряжении похожих элементов управления: ControlTreeView, ControlListView, _GUICtrlTreeView, _GUICtrlListView не дают ровным счетом ничего. Т.е. совсем ничего. Ни одной из этих функций воспользоваться не удается. Инструмент управления нем как рыба. Так ведомы ли кому-либо хоть какие-либо способы добиться от него чего-либо?
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Ну вот, нашел косвенное подтверждение, правда не для этого, а родственного ему элемента Virtual Treeview , но основанного на том же принципе работы с виртуальными данными: "... это принцип, при котором дерево абсолютно ничего не знало бы о данных своих узлов, даже их текст, например. Единственное, о чём знает VT это структура дерева, представленная, грубо говоря, связанным списком, где каждый элемент – запись (TVirtualNode), хранящая служебную информацию узла (настройки, состояние, индекс и т.д.)" http://delphigears.blogspot.hu/2011/08/virtual-treeview.html . Но самое обидное состоит в том, что текст из данного элемента даже нельзя скопировать в буфер памяти и, таким образом, он остается абсолютно недоступным.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Чтобы получить доступ к подобным объектам Delphi нужно изучить RTTI:
https://habrahabr.ru/post/85509/
http://delphi2010.ru/delphi-2010-rtti-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B/
http://www.delphimaster.ru/articles/rtti/
Затем написать DLL (на Delphi), внедрить её в нужный процесс и через неё получать доступ к элементам формы.

Есть ещё вариант чтения данных из памяти процесса. Подобный подход применён здесь: Сканирование памяти или Как прочитать текст в Label
 

SuperSonic

Новичок
Сообщения
25
Репутация
1
Ёпте. Я кажется тоже стал одним из счастливчиков, кто столкнулся с такой же бедой. :thumbs_up:
Стандартными методами можно получить только кол-во объектов в дереве TVirtualStringTree. Сам же способ "добраться" до каждого элемента в отдельности покрыт каким-то мраком, а тот кто его постигнет, судя по всему, станет гуру-магом. Вообще странно, что на весь интернет до сих пор нет толкового встроенного в autoit решения (т.к. много в каких софтинах встречается TVirtual..), а гугигль выдает этот форум и какой-то китайский.

Кто-нибудь вообще реализовал решение?

Как я понял надо вешать хук, но вот только на что? :blink:
А то люди пишут достаточно удручающие посты на этот счет http://www.cyberforum.ru/delphi-winapi/thread1222005.html
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Есть профессиональные пакеты для автоматизированного тестирования, например TestComplete, Ranorex и подобные. Возможно, они умеют работать с подобными элементами. Можете качнуть trial версию и попробовать. Но все они стоят денег. Больших денег.
 

SuperSonic

Новичок
Сообщения
25
Репутация
1
Ответ типа хочешь для личных нужд что-то у себя там автоматизировать, то вот тебе "решения" за уеву тучу зелени с ними ты забудешь про проблемы с autoit как страшный сон, а заодно и про здравый рассудок.

Хотелось бы узнать что-то более реально относящееся к autoit-решению, а не заменой одного на другое.
 

SuperSonic

Новичок
Сообщения
25
Репутация
1
InnI сказал(а):
сообщите. Мне бы тоже хотелось это узнать.

Пока же я узнал, что использование TVirtualStringTree при разработке приложений на делфи творит поистине чудеса, но не без побочных эффектов коими забиты посты на форумах посвященных делфи. Вообще не понимаю, каким надо было быть извращенцем чтобы создать "это", содержимое списка ни в памяти ни где-либо не сохраняется (правда не понятно, каким тогда макаром это все выводится на экран монитора, наверное магия картинкой :-\) ?!

Советуют тянуть информацию(отображаемую затем в TVirtualStringTree) от туда же, откуда берет и сама софтина - но это уж лютый бдсм и никак не пахнет универсальным решением.

Насчет Ranorex - то он не "видит" содержимое TVirtualStringTree, а если и кликает, то клик этот записывается в виде координат, а не как клик по элементу дерева. Вообще достаточно весело получается, когда TVirtualStringTree список существует, но все его элементы скрыты (т.е. не отображаются), то вот ни TestComplete ни уж тем более Ranorex этого не замечают и никак не определяют (ну или я просто рукожоп :blink:smile:
 
Верх