Автор
|
Тема: Опять я со своей кнопкой. :)
|
Nicholas |
опубликован 08-05-2001 19:21 MSK
Что надо сделать: Отловить нажатие кнопки в другом приложении. В DLL я пишу функцию extern "C" __declspec(dllexport) MouseHook(int, WPARAM, LPARAM); MouseHook(int nCode, WPARAM wParam, LPARAM lParam) { if(wParam==BN_CLICKED) { MessageBeep(-1); } return 0; }В приложении я к ней обращаюсь: hMouseHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)(pMouseHook), hLib,0); Дело в том, что при работе приложения, когда я загружаю эту ловушку - пищит не только при нажатии на какую-нибудь кнопку (OK, Применить…), но и вообще – при любой работе с мышью. (нажатие, перемещение). Я пробовал HIWORD (wParam), тоже всегда входит (т.к. всгда занчение всегда равно 0 и код BN_CLICKED=0). LOWORD (wParam) – никогда не входит. Кто в этом понимает – помогите, plz… Запарился я уже с этим hook’ом. :(((
|
Nicholas
|
опубликован 09-05-2001 02:09 MSK
Еще один вопрос: Как и откуда можно получить стандартные названия кнопок: Применить, OK,... Мне надо отследить нажатие клавиши ПРИМЕНИТЬ На Английском яз - Apply, на Испанском - черт знает как... А мне нужно, чтобы от языка работа приложения не зависела...
|
OlegN
|
опубликован 14-05-2001 11:53 MSK
Ты спутал сообщение, которое посылает кнопка своему parent окну WM_COMMAND, LOWORD(wParam) == BN_CLICKED HIWORD(wParam) == ControlID, с сообщениями от мышки, а это разные вещи, ведь нажать кнопку можно не только мышью, а и по Enter-у и по короткой клавише (Alt-O например) и т.д. Если приложение, в котором ты ловишь нажатие на клавишу написано на MFC, то на 99,9 % кнопка OK будет иметь идентификватор (ControlID) равный IDOK не зависимо от языка. У меня предложение такое : поставить hook на parent окно (диалог) и отслеживать WM_COMMAND сообщения где LOWORD(wParam) == BN_CLICKED && HIWORD(wParam) == IDOK |
Nicholas
|
опубликован 15-05-2001 12:22 MSK
Спасибо. Для одного приложения сработало, но для другого - нет, отсюда возник вопрос: Как можно узнать ControlID принадлежащий кнопке Есть ли для этого стандартные утилиты? |
OlegN
|
опубликован 15-05-2001 12:09 MSK
Зная HWND кнопки можно получить его ControlID используя функцию : long ControlID = ::GetWindowLong(hWnd, GWL_ID); |
Nicholas
|
опубликован 16-05-2001 16:05 MSK
Спасибо большое! Получилось |