Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 2
Регистрация: 21.12.2016
Сообщений: 21

Выделить узел TreeView в Чужой программе

25.02.2017, 21:00. Показов 2183. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется сторонняя программа. На главной форме находится PageControl. На одной из ее вкладок присутствуют TreeView и Button. Необходимо при помощи моего приложения выделять узлы в PageControl и потом щелкать по Button. С кнопкой разобрался, используя функции FindWindowEx, дискрипторы родительских компонентов и функцию SendMessage.
А вот с выделением узлов возникли проблемы. Не знаю, с чего начать. Вот, как щелкать по кнопке:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
HWND H=Handle, HPage, HTabSh, HndBtn, HndTree;
char Pch[128];
do
  {
   H=GetNextWindow(H,GW_HWNDNEXT);
   GetWindowText(H,Pch,128);
   if(CompareText(Pch,"Parma")==0)
   break;
  }
 while (H!=NULL);
 
 SetForegroundWindow(H);
 HPage=FindWindowEx(H,0,"TPageControl",NULL);
 HTabSh=FindWindowEx(HPage,0,"TTabSheet","Объекты");
 HndBtn=FindWindowEx(HTabSh,0,"TButton","Добавить");
 SendMessage(HndBtn,BM_CLICK,0,0);
Добавлено через 17 минут
И да, узлы к тому же дочерние
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2017, 21:00
Ответы с готовыми решениями:

Выделить узел TreeView
Имеется код привязки данных к TreeView. Вопрос - как выделить из кода любой узел. Если это не возможно в текущей реализации, то что в коде...

Выделить узел TreeView
Подскажите как выделить узел treeView1? Следующий код выводит контекстное меню возле выделенного узла (нажатие правой кнопкой мыши), но...

Программно выделить узел в treeview
Такая же тема была в разделе "Программирование на Visual Basic", но в .NET нет таких методов. Помогите плз.

9
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
26.02.2017, 10:19
Среди инструментов VS есть замечательная утилита Spy++
Запусти, посмотри, какие сообщения получает TreeView при разных событиях, и сделай так же.
Кстати, в MSDN'е они описаны: Tree View Messages
Наерное что-нибудь типа TVM_SELECTITEM
0
0 / 0 / 2
Регистрация: 21.12.2016
Сообщений: 21
26.02.2017, 14:08  [ТС]
VS- это Visual Studio, я так понимаю? Но я в Borlande 6 пытаюсь. НО с описанием я поразбираюсь. Спасибо.

Добавлено через 11 минут
VS- это Visual Studio, я так понимаю? Но я в Borlande 6 пытаюсь. НО с описанием я поразбираюсь. Спасибо.

Добавлено через 2 часа 46 минут
Вроде получилось:

C++
1
2
3
4
5
6
7
8
hItem = (HTREEITEM) SendMessage(HndTree, TVM_GETNEXTITEM, TVGN_ROOT, NULL);  //определяю хэндл корневого узла
SendMessage(HndTree, TVM_SELECTITEM, TVGN_CARET, (LPARAM) hItem) // выделяю его
Sleep(2000);
hItem = (HTREEITEM) SendMessage(HndTree, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM) hItem); //получил хэндл 1-го доч. узла
SendMessage(HndTree, TVM_SELECTITEM, TVGN_CARET, (LPARAM) hItem); // опять выделяю его
Sleep(2000);
hItem = (HTREEITEM) SendMessage(HndTree, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM) hItem); //хэндл след. доч. узла
SendMessage(HndTree, TVM_SELECTITEM, TVGN_CARET, (LPARAM) hItem); // выделяю 2-й узел
Спасибо за наводку
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 87
05.10.2023, 16:33
А как осуществить клик по конкретному HTREEITEM ? Дело в том, что TVM_SELECTITEM делает только выделение, а клик не совершает.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
05.10.2023, 17:12
Цитата Сообщение от roman912 Посмотреть сообщение
А как осуществить клик по конкретному HTREEITEM
Отправить сообщения HndTree WM_LBUTTONDOWN/WM_LBUTTONUP с координатами нужного элемента.
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 87
05.10.2023, 19:04
Цитата Сообщение от Azathtot Посмотреть сообщение
Отправить сообщения HndTree
А как это сделать ? В SendMessage надо HWND параметр передать, как именно HndTree передать сообщение ?
Или мне нужна другая функция ?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
05.10.2023, 19:28
Цитата Сообщение от roman912 Посмотреть сообщение
А как это сделат
Заполнить wParam и lParam нужными значениями и отправить сообщение через SendMessage. Только у вас получатель - хендл самого TreeView
И вообще, бросайте вы эту ерунду, все равно работать толком не будет...
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 87
05.10.2023, 20:18
Цитата Сообщение от Azathtot Посмотреть сообщение
с координатами нужного элемента
А как координаты ручками в паинте только подбирать к элементам ?
Попробовал так:

C++ (Qt)
1
2
3
4
HWND hwnd = FindWindowW(L"TF_tab_tf",NULL);
HWND TTreeView = FindWindowExW(hwnd,NULL,L"TTreeView",NULL);
SendMessageW(TTreeView, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(76, 22));
SendMessageW(TTreeView, WM_LBUTTONUP, 0, MAKELPARAM(76, 22));
Вроде работает, как я понял тут относительно компонента базового TTreeView передаются координаты ?
Можно ли получить координаты компонентов HTREEITEM ?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
05.10.2023, 22:35
Цитата Сообщение от roman912 Посмотреть сообщение
Можно ли получить координаты компонентов HTREEITEM ?
Не-а... Потому что он (компонент) может быть не в области отрисовки.
А сама TreeView может быть скроллирована, и показы иатемы начиная с произвольного индекса
0
Отпрыск ChatGPT
 Аватар для Azawa
33 / 29 / 4
Регистрация: 18.06.2019
Сообщений: 152
09.10.2023, 01:42
AlexAES, Spy++, или Inspect точно была в отдельно поставляющемся Windows SDK.

Жесть. Да можно по-любому, TVM_GETCOUNT, TVM_GETITEM, TVM_SELECTITEM.
Кстати, TVM_SELECTITEM
Выбирает указанный элемент в виде дерева, прокручивает его в представление или перерисовывает элемент в стиле, используемом для указания целевого объекта операции перетаскивания.
Но и так можно обойтись одним TVM_SELECTITEM, если только клик по элементу как-то не обрабатывается как-то особо в родителе TreeView не выбором элемента, а именно кликом и хиттестом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2023, 01:42
Помогаю со студенческими работами здесь

Как в TreeView выделить узел, чтобы подсвеченным был не только сам текст узла, а полностью вся строка с узлом ?
Как в TreeView выделить узел, чтобы подсвеченным был не только сам текст узла(рис 1), а полностью вся строка с узлом(рис2) ? Заранее...

Переименовать узел TreeView
Собственно сам вопрос и есть. Не могу переименовать узел дерева.Заранее спасибо

Событие по клику на узел TreeView
Я вывожу результаты работы программы в TreeView. Потом надо сделать чтобы по клику на любой узел дерева открывалось окно с параметрами...

Программно открыть узел treeView
Доброго времени суток всем! На форме есть treeView, как при загрузке формы открыть определенный узел?

Как раскрыть узел treeView?
...программно.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru