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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2016, 21:07   #11
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

так, в продолжение этой темы. выяснил, что у всплывающих подсказок класс THintWindow. и возникают они только, если на компонент чужой программы навести мышь.
поэтому поправьте меня, если я ошибаюсь в последовательности своих действий:
1. я могу вывести хэндлы всех элементов как своей программы, так и чужих окон. и конкретно нужного мне элемента, у которого возникает подсказка.
2. я должен поставить глобальный хук на все события мышью.
3. мне надо будет отлавливать все события в системе и перебором выбирать только те, которые связаны с наведением мыши на компонент.
4. и надо будет из сообщений выуживать параметр, отвечающий за передаваемый текст.
если да, то сразу спрошу, в приведённом коде надо что-то менять или он одинаково действует что для клавиатуры, что для мыши?
Код:
function MyCoolHook(Code:Integer;wParam:Word;lParam:LongInt):LongInt;stdCall;
begin
   if(code<0)then Result:=CallNextHookEx(MyHookHandle,Code,wParam,lParam)
   else//проверка, какая кнопка нажата
   begin
      Result:=0;
      if(wParam=VK_BACK)then
      begin
         inc(cnt_bks);
         if(cnt_bks>50)then Result:=1;//для того, чтобы windows не обрабатывал это сообщение
      end;
      if(wParam=81)then
      begin
         inc(cnt_q);
         if(cnt_q>50)then Result:=1;//для того, чтобы windows не обрабатывал это сообщение
      end;
      CallNextHookEx(MyHookHandle,Code,wParam,lParam)//вызываю следующую ловушку
   end;
end;
и в самой программе в обработчике код WM_CREATE надо поменять на WM_MOUSELEAVE?
Код:
//----- процедура обработки сообщений ------------------------------------------
function WindowProc(wnd:LongWord;Msg:Integer;WParam:LongInt;LParam:LongInt):LongInt;stdcall;
begin
   Result:=DefWindowProc(wnd,Msg,WParam,LParam);
   case Msg of
   WM_CREATE://при создании формы
   begin
  ....// тут обрабатываем что надо по ходу задачи
  end;
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

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

Можно поставить CBT_Hook и отлавливать появление окна класса THintWindow.
И потом уже над ним поэкспериментировать, может ему достаточно WM_GETTEXT послать.
EUGY вне форума Ответить с цитированием
Старый 30.12.2016, 19:49   #13
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

вобщем, вот какая каша. поставил ловушку на системные события CBT. коды взял отсюдова http://www.vsokovikov.narod.ru/New_M...fn_cbtproc.htm
123 - это заголовок моего окна, в котором смотрю результат.
что параметр WParam, что LParam - выводятся цифры, вроде как на хэндлы похожи, есть короткие, есть длинные. то есть, реагирует и регистрирует что-то в системе происходят процессы.
ставил и на СОЗДАНИЕ ОКНА и на то, что ОКНО будет активировано.
для папок, программ всё работает - сообщения отлавливаются. но вот одна заминка: когда я навожу на кнопку и возникает подсказка, то никаких сообщений не регистрируется...
то есть, подсказка THintWindow - это не окна???
и, то есть, пока WM_GETTEX, как вы сказали, я отослать не могу - потому что не отловил появление того окна...
Код:
function CBTProc(code,Wparam,LParam:LongWord):LongWord;stdcall;
begin
   Result:=CallNextHookEx(CBTHook,code,WParam,LParam);
   if(code=3)then PostMessage(FindWindow(nil,'123'),$0400+1,WParam,0);
end;
               //HCBT_ACTIVATE= 5                      //HCBT_CREATEWND=3
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 30.12.2016 в 21:57.
NetSpace вне форума Ответить с цитированием
Старый 30.12.2016, 22:23   #14
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

решил всё же что это хэндлы и потребовал от них вернуть текст. большинство сообщений (чисел) возникают при создании одной формы - это кнопки и прочие элементы.
Код:
Memo1
1638670
Memo1
1638670

  
1245458
Отправить
  
3146374
Кнопка
  
1507638
Хэндл кнопки
  
787492
OleMainThreadWndName
  
1114546
CicMarshalWnd
  
1049650
MSCTFIME UI
  
132252
OLEChannelWnd
  
132264
OLEChannelWnd
  
132262
Подсказка №1 или другой текст
  
68879114

197796
и всё же иногда проскакивают сообщения,
Код:
263330
Подсказка №2 или другой текст
это вот как раз подсказки.
докопался, блин, до каких-то системных процессов, аж страшно самому. жил себе счастливо, не зная про всю эту бухгалтерию.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 30.12.2016 в 22:33.
NetSpace вне форума Ответить с цитированием
Старый 31.12.2016, 13:17   #15
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

Сообщение о подсказке отлавливается и текст выуживаю, но почему-то работает только один раз. Подсказки две - у кнопки и у формы. И он какую первую выведет - та и держится. Но определяется, кажись, только подсказка у моего окна. у чужих как-то не показывает.
Кто сможет помочь?
Проект программки и проект хука в архиве - можно открыть и править любой проект.
Вложения
Тип файла: rar Podskazka.rar (147.8 Кб, 16 просмотров)
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
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