Хук на Toolbarwindow32

Тема в разделе "MS Visual C++", создана пользователем solova, 27 фев 2011.

Статус темы:
Закрыта.
  1. solova

    solova Гость

    С хуками понемногу разбираюсь уже.
    Хочу создать программку которая отслеживает нажатие на определённую кнопку в 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" и т.п..
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Нет.
    Думаю тебе нужно просто узнать ID необходимой кнопки и перехватывать уже его в WM_COMMAND.

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

    solova Гость

    Воо спасибо.
    Нету возможности сейчас проверить.
    Как я понял, Хук ставить на 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)

    Ураа , работает , спасибо.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей