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

Ваш аккаунт

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

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

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

Обработка сообщений мыши

12K
02 декабря 2005 года
Chinchipos
12 / / 02.12.2005
Каким образом можно отследить события мыши в WindowsXP (нажатие кнопок, перемещение курсора и его координаты на дисплее)?
243
02 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by Chinchipos
Каким образом можно отследить события мыши в WindowsXP (нажатие кнопок, перемещение курсора и его координаты на дисплее)?


Смотри в сторону системных глобальных ловушек, динамических библиотек и функции SetWindowsHookEx(...).
Можно даже пример.
Код ловушки в DLL:

Код:
//функция устанавливающая ловушку на события мыши
HOOKPROC MouseHook(int nCode,WPARAM w_param,LPARAM l_param)
{
    mouse_data=(MOUSEHOOKSTRUCT*)(l_param);
    HWND par_win=mouse_data->hwnd;//дескриптор окна над которым находится мыша
    HWND main_wind=FindWindow("main_win",NULL);//ищем окно, загрузившее нашу dll с ловушкой
                                            switch(w_param)
    {
    case WM_MBUTTONDBLCLK://событие мыши, которое нам надо отследить.
//тут наш код-обработчик этого события
//например посылаем некое сообщение программе загрузившей dll
        PostMessage(main_wind, ХХХ, (WPARAM)par_win, (LPARAM)mouse_data->hwnd);
        return 0;
    }
    return 0;
}

Теперь - код для главной программы:
Код:
HINSTANCE h_lib=LoadLibrary("hook_dll.dll");
    if(!h_lib)
    {
        ER_MSG("Не удалось загрузить библиотеку");
        return 0;
    }
   
    //устанавливаем ловушку на события мыши
    HOOKPROC pMouseHook=(HOOKPROC)MouseHook;
    if(!pMouseHook)//проверка удачности получения указателя на функцию ловушки
    {
        MessageBox(0,"Не удалось получить адрес функции ловушки",0,MB_ICONERROR);
        return 1;
    }
//собственно устанавливаем ловушку
    HHOOK hMouseHook=SetWindowsHookEx(WH_MOUSE, (HOOKPROC)(pMouseHook), h_lib,0);
    if(!hMouseHook)
    {
        MessageBox(0,"Не удалось установить ловушку для мыши!",0,MB_ICONERROR);
        return 2;
    }

В данном случае используется статическое связывание dll и exe, функия LoadLibrary применена исключительно для получения дескриптора экземпляра библиотеки применяемого в функции SetWindowHookEx(...). Потом библиотеку обязательно нужно будет освободить при помощи FreeLibrary(...).
См. статическое/динамическое связывание.
ЗЫ Если хочешь что бы в системе на 100% корректно работали все мышиные хуки, а не только твой, то фукнцию ловушки надо доделать. За этим см. сюда.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог