Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2016, 16:36   #1
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,811
По умолчанию Отловить подсказку по хэндлу

Добрый вечер всем!
Проблема вот какая.
На моей форме у созданной мной кнопки я могу сделать подсказку и потом её вывести в виде текста.
Код:
 Button1.Hint:='Подсказка или другой текст';
   Button1.ShowHint:=True;
Это раз.
Два: получить хэндл чужой кнопки я могу и нажать на неё тоже программным путём:
Код:
 SendMessage('тут хэндл кнопки',bm_Click,0,0);
а вот и три - сама проблема:
как, зная хэндл чужой кнопки кнопки, получить текст из подсказки?
застопорился вот на этой строке - надо передать кнопке сообщение, будто бы над ней появился курсор мыши.
Код:
SendMessage('тут хэндл кнопки',CM_MOUSEENTER,0,0);
и, самое главное, где должна будет появиться эта подсказка? и чтоб не искать её, нельзя ли как-то получить её в виде сообщения или текста?
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 11.12.2016 в 16:38.
NetSpace вне форума Ответить с цитированием
Старый 11.12.2016, 17:57   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
и чтоб не искать её, нельзя ли как-то получить её в виде сообщения или текста?
В чужом приложении всплывающие подсказки могут быть организованы как угодно произвольно. Разве что предположить, что они организованы на comctl32 и можно попробовать вытащить текст через TOOLINFO.
EUGY вне форума Ответить с цитированием
Старый 11.12.2016, 18:24   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,811
По умолчанию

Код:
SendMessage('хэндл окна',TTM_GETTOOLINFO,0,LParam(TI));
Label1.Caption:=IntToStr(LParam(TI));
LParam(TI) возвращает какое-то число. что это - ?
или я что-то неправильно делаю?
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 11.12.2016, 19:03   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Не, ну что Вы! Это не так быстро.
Вам сначала узнать (через spy++) что за класс окна у всплывающей подсказки, может это и не TOOLTIP_CLASS. Поймать ее хендл.
Выделить память в чужом процессе для TOOLINFO.
Послать TTM_GETTOOLINFO, в lparam указать адрес TOOLINFO.
И тогда, если все правильно, структура TOOLINFO будет содержать в одном из своих полей искомый текст.
EUGY вне форума Ответить с цитированием
Старый 11.12.2016, 19:14   #5
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,811
По умолчанию

сторонней программой узнал, что это tooltips_class32 - это же как раз то, что нужно для работы с TOOLINFO?
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 11.12.2016, 19:19   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Да, это то самое.
Но приготовьтесь, реализация того что вам надо будет довольно громоздкой.
Впрочем, может кто предложит элементарное решение, а мы тут голову ломать будем...
EUGY вне форума Ответить с цитированием
Старый 11.12.2016, 19:57   #7
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,811
По умолчанию

а, вообще, может быть и поторопился - не туда глянул.
вот что вышло. сгруппировал по порядку
ХЭНДЛ
ИМЯ КЛАССА
ТЕКСТ ДАННОГО ОБЪЕКТА
Код:
24602
#32770

--------------
655972
Button

--------------
524678
#32770

--------------
524800
#32770

--------------
590350
Static
Имя профиля:
--------------
655976
ComboBox

--------------
852876
Button
&Отключить
--------------
1180322
Button
&Функции...
--------------
983790
Static
Время подключения:
--------------
590534
Static
Выгруженные/загруженные данные:
--------------
459302
Static
00:30:43
--------------
655974
Static
2,769,774 Bytes
--------------
524946
Button
NDIS
--------------
459412
ComboBox

--------------
524930
Static
NDIS:
--------------
4915690
Static
WLAN:
--------------
852900
ComboBox

--------------
1508326
Button
Подключить
--------------
721586
Button
Подключить
--------------
655990
ComboBox

--------------
655968
Static
ADSL:
--------------
2425262
#32770

--------------
984286
SysListView32

--------------
1311920
SysHeader32

--------------
1115310
Afx:00400000:0
iSAPUSplitterCtrl
--------------
132364
Edit

--------------
132368
Afx:00400000:0
iSAPUSplitterCtrl
--------------
1574090
SysTreeView32

--------------
2031932
Static

--------------
1180882
Static

--------------
132362
Static

--------------
1180818
#32770

--------------
394498
ReBarWindow32

--------------
1115332
ToolbarWindow32

--------------
1311554
#32770

--------------
1180922
SysListView32

--------------
1311160
SysHeader32

--------------
918546
Afx:00400000:0
iSAPUSplitterCtrl
--------------
2687444
#32770

--------------
1114142
Edit

--------------
787526
Afx:00400000:0
iSAPUSplitterCtrl
--------------
2163518
SysTreeView32

--------------
2360484
Button
??
--------------
1507646
Button
??
--------------
1376714
Button
??
--------------
1246376
Button
??
--------------
1769814
Button
??
--------------
1574022
Edit

--------------
263442
Static

--------------
263432
Button
MOE
--------------
3605248
Button
MOO
--------------
853248
Button
??
--------------
787696
#32770

--------------
2163860
ReBarWindow32

--------------
1311938
ToolbarWindow32

--------------
918430
#32770
Dialog
--------------
1311744
Button

--------------
918300
Button
-
--------------
918228
Button
1
--------------
852694
Button
2
--------------
656004
Button
3
--------------
721642
Button
Call
--------------
590118
Button
ring off
--------------
590296
Button
4
--------------
787352
Button
5
--------------
524942
Button
6
--------------
1049680
Button
7
--------------
524714
Button
8
--------------
787190
Button
9
--------------
524934
Button
*
--------------
787194
Button
0
--------------
459588
Button
#
--------------
721652
Button
PhoneBook
--------------
524992
Button
C
--------------
1311716
Button
+
--------------
1442806
Button
Forward
--------------
590530
Static
????:123456
--------------
852728
Static
??????
--------------
786716
Static
19:55:28
--------------
590464
Static
     
--------------
524926
Static

--------------
524950
Button
calling
--------------
524940
Button
talking
--------------
590568
Button
holding
--------------
590316
Button
+
--------------
459252
Button
Speaker
--------------
459304
Button
MIC
--------------
459256
Button

--------------
459306
Button
VideoCall
--------------
394030
#32770

--------------
1115134
Edit

--------------
1245884
SysListView32

--------------
787234
SysHeader32

--------------
11600626
#32770

--------------
656010
Static

--------------
590144
msctls_trackbar32

--------------
852648
Static

--------------
721544
Button

--------------
524784
Button

--------------
3539300
#32770

--------------
2228524
Afx:00400000:0
iSAPUSplitterCtrl
--------------
3736014
SysTreeView32

--------------
3015460
CTrendsCtrl

--------------
524794
#32770

--------------
459294
SysTreeView32

--------------
590170
Edit

--------------
918426
SysListView32

--------------
786742
SysHeader32

--------------
786740
Static
???
--------------
786744
Edit

--------------
1049036
#32770

--------------
1180178
ReBarWindow32

--------------
1508434
ToolbarWindow32

--------------
394398
Afx:00400000:0
iSAPUSplitterCtrl
--------------
2032100
Afx:00400000:0
iSAPUSplitterCtrl
--------------
459250
#32770

--------------
787152
ReBarWindow32

--------------
984060
ToolbarWindow32

--------------
655982
#32770

--------------
655980
Button

--------------
655970
Button

--------------
524782
Button

--------------
918420
Button

--------------
524798
Button

--------------
655966
Button

--------------
655986
Button

--------------
590312
Button

--------------
655586
Button

--------------
655984
Static
WCDMA
--------------
590098
Static
MTS RUS
--------------
524614
Static
0.00 кбит/с
--------------
1245854
Static
0.00 кбит/с
--------------
655830
#32770

--------------
нет там нашего любимого tooltips_class32...
зато есть куча другого, не менее интересного и непонятного...
программа, с которой работаю, - МТС Коннект. пытаюсь у неё отловить подсказку, появляющуюся под мышкой при наведении на кнопку. на кнопке нет текста, там рисунок...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 11.12.2016 в 19:59.
NetSpace вне форума Ответить с цитированием
Старый 11.12.2016, 20:13   #8
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Какое то окошко должно отвечать за всплывающие подсказки.
Может оно выгружено и динамически создается только в определенный момент.
Разными путями можно выяснить.
EUGY вне форума Ответить с цитированием
Старый 11.12.2016, 20:44   #9
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,811
По умолчанию

попробовал реализовать в таймере, чтоб в разные моменты времени показывались изменения- где-то должен появиться текст у какого-то компонента- так не видно. даже в момент, когда курсор наведён на кнопку и видна подсказка.
какие ещё будут идеи?
пересмотрел ещё раз ту стороннюю программу, потыкал мышкой. всё же есть там компоненты класса tooltips_class32. надо их выискивать, но они почему-то не отображаются все в списке найденных
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 11.12.2016 в 21:35.
NetSpace вне форума Ответить с цитированием
Старый 24.12.2016, 20:21   #10
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,811
По умолчанию

АДМИН! тему закрой или перемести. возникла новая задача
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать путь к файлу по хэндлу? W0LF Win Api 6 01.01.2017 13:54
Получить PID по хэндлу окна Xo66um Общие вопросы Delphi 3 28.07.2014 15:27
Путь к файлу по хэндлу окна Veiron Общие вопросы Delphi 10 22.05.2009 20:47
Активировать всплывающую подсказку Илюха Общие вопросы Delphi 6 13.12.2007 16:35