Хук на Toolbarwindow32

  • Автор темы solova
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

solova

#1
С хуками понемногу разбираюсь уже.
Хочу создать программку которая отслеживает нажатие на определённую кнопку в ToolbarWindow32 на чужом окне.
Длл уже есть, и программка включающая Хук тоже есть.
Проблема вот в чём.
В функции установки хука

SetWindowsHookEx( WH_CALLWNDPROC, Функция Хука, HINSTANCE hMod, DWORD dwThreadId);

В "DWORD dwThreadId" я сую ID который получаю следующим образом.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Пример</div></div><div class="sp-body"><div class="sp-content">HWND hWnd= ::FindWindow(L"Имя окна программы",NULL);
hWnd = ::GetWindow(hWnd,GW_CHILD);
hWnd = ::GetWindow(hWnd,GW_HWNDNEXT);
.......
if (hWnd)
SETHook(GetWindowThreadProcessId(hWnd,NULL));
Ну и я могу достать Хэндл только от "ToolbarWindow32", потому что для кнопок его нету.
Есть ли какие способы реализовать слежку только для одной кнопки , а не для всего Toolbar-а ?
Если нет, то как после установки хука на "ToolbarWindow32" получив мессагу типа WM_MOUSEACTIVATE или какой нибудь клик мышки ,определить какая именно кнопка была нажата. Например по "Caption" и т.п..
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
Есть ли какие способы реализовать слежку только для одной кнопки , а не для всего Toolbar-а ?
Нет.
Думаю тебе нужно просто узнать ID необходимой кнопки и перехватывать уже его в WM_COMMAND.

Добавлено: P.S.: Другого способа я не вижу.
 
S

solova

#3
Думаю тебе нужно просто узнать ID необходимой кнопки и перехватывать уже его в WM_COMMAND.
Воо спасибо.
Нету возможности сейчас проверить.
Как я понял, Хук ставить на ID_ToolbarWindow и его мессаги надо отслеживать.
Я тут сделал набросок.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Фуньки в ДэЛэЛэ</div></div><div class="sp-body"><div class="sp-content">
C++:
SetWindowsHookEx( WH_CALLWNDPROC, CallWndProc, HINSTANCE hMod, DWORD "ID_Toolbar-а");
....
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) 
{
CWPSTRUCT *cwp=(CWPSTRUCT*)lParam;								//Заполняем структуру CWP
if ((cwp->message==WM_COMMAND)&&(LOWORD(cwp->wParam)=="ID_кнопоньки"))
{
/*					*/
/*Кнопонька была нажата*/
/*					*/
}
return CallNextHookEx(hHook,nCode,wParam,lParam); 					//Вызываем следующую ловушку в системе
}
И на счёт CWP структуры, она очень нужна?(видел пример без неё)

Узнал ID_кнопки "34571" , его прям так и вписывать? (LOWORD(cwp->wParam)==34571)

Ураа , работает , спасибо.
 
Статус
Закрыто для дальнейших ответов.