Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отлов WM_MOVING и WM_SIZING.

5.7K
30 июля 2007 года
Vedrus
49 / / 29.10.2006
Нужно отловить выше названные сообщения ко всем окнам системы, но что-то не ловятся. WM_MOVE, WM_SIZE ловятся, а эти нет. Вот код (MS VS 7.1)

DLL
Код:
#include <windows.h>
#include "DetectWindow.h"

HHOOK hhookGetMsg;  // Значение устанавливает главная программа
HCURSOR hcurCursor;
static BOOL blah = FALSE;

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD fdwReason, LPVOID lpvReserved)
{
    return TRUE;
}

EXPORT LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
/* Перехватывает все сообщения всех окон */
{
    MSG *msg = (MSG *) lParam;  // Перехваченное сообщение

    switch (msg->message)
    {
    case WM_SIZING:
    case WM_MOVING:
        MessageBox(msg->hwnd, "Ура, Товарищи!", "Ура!", MB_OK);
        break;
    }

    return CallNextHookEx(hhookGetMsg, nCode, wParam, lParam);
}


Сама программа
Код:
#include <windows.h>

HOOKPROC hkprcGetMsg;           // Процедура-перехватчик
static HINSTANCE hinstDLL;      // Хэндл библиотеки с процедурой-перехватчиком
static HHOOK hhookGetMsg;       // Хэндл хука (статиками обзываются глобальные переменные)

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
    hinstDLL = LoadLibrary((LPCTSTR) "DetectWindow.dll");
    hkprcGetMsg = (HOOKPROC) GetProcAddress(hinstDLL, "_GetMsgProc@12");

    hhookGetMsg = SetWindowsHookEx(
                        WH_GETMESSAGE,  // Перехват размерных сообщений
                        hkprcGetMsg,    // Перехватчик
                        hinstDLL,       // DLL перехватчика
                        0);             // Перехватывать все потоки
   
// Не мешать остальным прогам работать (спать) //
    while (TRUE) Sleep(100000000);

    return TRUE;
}


Хуки уже все возможные перебрал: WH_CALLWNDPROC, WH_CBT, WH_GETMESSAGE. Ничего не помогает. Как лечить?

Если что в аттаче исходники.
3.3K
31 июля 2007 года
ShadyMan
191 / / 15.07.2006
Долго проверял и так, и сяк: действительно не работает, хотя всё написано вроде бы правильно. Может, в последних версиях Windows такой перехват просто не возможен? Извини, что не даю полезной информации, но, по крайней мере, ты знаешь, что такое не только у тебя.
353
01 августа 2007 года
Nixus
840 / / 04.01.2007
Скорее всего эти сообщения доходят до процедуры окна в обход очереди сообщений, что, кстати, не удивительно, т.к. обрабатываться они должны сразу.
5.7K
01 августа 2007 года
Vedrus
49 / / 29.10.2006
Понятно, что хук не панацея. Может кто знает другой способ?
353
01 августа 2007 года
Nixus
840 / / 04.01.2007
Попробуй другой хук. WH_CALLWNDPROC или WH_CBT, например.
5.7K
01 августа 2007 года
Vedrus
49 / / 29.10.2006
Читать умеешь? Уже пробовал.
353
01 августа 2007 года
Nixus
840 / / 04.01.2007
Пардон, был невнимателен.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог