друзья, работаю с чужим приложением, у которого
SysListView32 control имеет стиль LVS_OWNERDATA, то есть является virtual ListView.
речь идет об организации списка открытых позиций в МТ5.
но хоть ты тресни не получается прочитать текст из SysListView32 control, читаю в DLL
таким вот макаром, h_SysListView32 - это handle для SysListView32, проверил с помощью установки item в состояние SELECTED, t_LVtext - чтение сюда, всегда пусто
Мы же уже обсуждали это. Чаще всего у таких контролов (с Owner data) данные находятся в виртуальном списке, а не в самом контроле. Так что напрямую никак. Разве что распознаванием символов заниматься...
Мы же уже обсуждали это. Чаще всего у таких контролов (с Owner data) данные находятся в виртуальном списке, а не в самом контроле. Так что напрямую никак. Разве что распознаванием символов заниматься...
все правильно, практически все данные находятся в виртуальном списке у родителя,
но мы имеем штатные возможности попросить родителя поделится данными.
мы можем это сделать послав родителю WM_NOTIFY предоставив ему буфер, в который пишем чего мы от родителя хотим,
и в который родитель возвращает нам нужную инфу:
Virtual List-View Style
A virtual list view is a list-view control that has the LVS_OWNERDATA style. This style enables the control to handle millions of items because the owner receives the burden of managing item data. This allows you to use the virtual list-view control with large databases of information, where specific methods of data access are already in place.
A virtual list-view control maintains very little item information itself. Except for the item selection and focus information, the owner of the control must manage all item information. Other processes request item information from the owner by using LVN_GETDISPINFO notification codes.
Because this type of list control is intended for large data sets, it is recommended that you cache requested item data to improve retrieval performance. The list view provides a cache-hinting mechanism to assist in optimizing the cache. The hint is implemented in the form of an LVN_ODCACHEHINT notification code.
https://msdn.microsoft.com/en-us/library/windows/desktop/bb774818(v=vs.85).aspx
- msdn.microsoft.com
> работаю с чужим приложением
Из другого процесса данные просто так в лоб выцепить нельзя. Работают только вызовы GetWindowText для главных окон приложения, которые отображаются в таскбаре, если я не ошибаюсь. Всё остальное требует спец. приёмов. Копайте dll injection в книге Рихтера.
> работаю с чужим приложением
Из другого процесса данные просто так в лоб выцепить нельзя. Работают только вызовы GetWindowText для главных окон приложения, которые отображаются в таскбаре, если я не ошибаюсь. Всё остальное требует спец. приёмов. Копайте dll injection в книге Рихтера.
само собой, но у меня DLL, которая является собственно частью приложения МТ5,
injection я как раз и сделал...
эта DLL вызывается из ЕА
само собой, но у меня DLL, которая является собственно частью приложения МТ5,
injection я как раз и сделал...
эта DLL вызывается из ЕА
Т.е. чужое приложение, из которого вы пытаетесь достать строки - это сам МТ, в контексте которого в итоге оказывается длл? тогда должно работать, по идее. Кстати, сабайтемы нумеруются с нуля, k_NMLVDISPINFO.item.iSubItem = 1; - это так и задумывалось?
ну, да, это так, просто пощупать пока...
но вот не работает, здесь t_LVtext всегда пусто...
ну, да, это так, просто пощупать пока...
но вот не работает, здесь t_LVtext всегда пусто...
А что по адресу k_NMLVDISPINFO.item.pszText после вызова? Ибо "You can either copy text to the buffer or assign the address of a string to the pszText member".
А что по адресу k_NMLVDISPINFO.item.pszText после вызова? Ибо "You can either copy text to the buffer or assign the address of a string to the pszText member".
k_NMLVDISPINFO.item.pszText - это указатель на мой буфер:
k_NMLVDISPINFO.item.pszText -> t_LVtext ,
родитель должен писать в этот буфер t_LVtext то что я попросил
k_NMLVDISPINFO.item.pszText - это указатель на мой буфер:
k_NMLVDISPINFO.item.pszText -> t_LVtext ,
родитель должен писать в этот буфер t_LVtext то что я попросил
Нет. Родитель может заменить адрес в pszText на свой буфер, я же привёл выдержку из мсдн.
да, нет. тут речь о другом
- если ты хочешь, что-то передать родителю, ты пишешь в этот буфер нужную инфу,
- если хочешь принять что-то от родителя, то читаешь из этого буфера.
речь не идет о том что родитель может заменить адрес
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
друзья, работаю с чужим приложением, у которого
SysListView32 control имеет стиль LVS_OWNERDATA, то есть является virtual ListView.
речь идет об организации списка открытых позиций в МТ5.
но хоть ты тресни не получается прочитать текст из SysListView32 control, читаю в DLL
таким вот макаром, h_SysListView32 - это handle для SysListView32, проверил с помощью установки item в состояние SELECTED, t_LVtext - чтение сюда, всегда пусто