Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > hook: следить за сменой заголовка чужого окна


Автор: alexcustov 25.7.2013, 19:19
Ставлю hook на известный HWND так:

Код

    hook = SetWinEventHook(EVENT_OBJECT_NAMECHANGE,
                          EVENT_OBJECT_NAMECHANGE,
                          0,
                          WinEventProcCallback,
                          processId,
                          threadId,
                          WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS | WINEVENT_SKIPOWNTHREAD);


callback функция:

Код

static void CALLBACK WinEventProcCallback(HWINEVENTHOOK hWinEventHook,
                                          DWORD dwEvent,
                                          HWND hwnd,
                                          LONG idObject,
                                          LONG idChild,
                                          DWORD dwEventThread,
                                          DWORD dwmsEventTime)
{
    TCHAR title[128];

    if(!GetWindowText(hwnd, title, sizeof(title)))
    {
        qWarning("Cannot get window text in window %p (%ld)", hwnd, GetLastError());
        return;
    }
    ...
}


В одном случае я слежу за Java окном, в другом - QWidget. В первом случае всё работает прекрасно, события о смене заголовка приходят нормально. Во втором - я получаю в callback-е hwnd равный 0, и выводится сообщение "Cannot get window text in window 0 (1400)". Если смотреть на QWidget в Spy++, то это обычное toplevel окно с нормальным заголовком. Какие есть идеи почему приходит 0?

Автор: Dem_max 26.7.2013, 09:36
Цитата

получаю в callback-е hwnd равный 0

Значит это сообщение ты должен проигнорировать

Автор: alexcustov 26.7.2013, 17:06
Цитата(Dem_max @ 26.7.2013,  09:36)
Значит это сообщение ты должен проигнорировать

Ok, проигнорировал. Но других сообщений не приходит.

Автор: GremlinProg 30.7.2013, 09:38
Если хук стоит на правильное окно, то скорее всего заголовок окна в нем может рисоваться вручную, и храниться отдельно. В таком случае, для смены заголовка WM_SETTEXT не используется и перехватывать изменения такого заголовока надо какими-то другими средствами.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)