Операционная система Microsoft Windows 3.1 для программиста -том 3


Листинг 3.12. Файл winhook/kbhook.cpp - часть 3


// Установка перехватчика на системную // очередь сообщений hhookMsg = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)MsgHookProc, hInst, NULL);

// Включаем флаг установки перехватчиков bHooked = TRUE;

// Сохраняем идентификатор окна приложения, // установившего перехватчики hwndClient = hwnd; } }

// ======================================================== // Функция RemoveKbHook // Удаляет системные перехватчики // ========================================================

extern "C" void WINAPI _export RemoveKbHook(void) { // Если перехватчики были установлены, // удаляем их if(bHooked) { UnhookWindowsHookEx(hhookMsg); UnhookWindowsHookEx(hhook); } }

// ======================================================== // Функция KbHookProc // Перехватчик сообщений от клавиатуры // ========================================================

extern "C" LRESULT CALLBACK KbHookProc(int code, WPARAM wParam, LPARAM lParam) { // Проверка флага обработки сообщений. Если содержимое // параметра code меньше нуля, передаем сообщение // функции CallNextHookEx без изменений if(code < 0) { CallNextHookEx(hhook, code, wParam, lParam); return 0; }

// Если пришло сообщение от клавиши <Control>, // проверяем, была ли эта клавиша нажата // три раза подряд if(wParam == VK_CONTROL) { if(!(HIWORD(lParam) & 0x8000)) { nHotKeyCount++;

// Если клавиша <Control> была нажата три // раза подряд, инвертируем флаг bCyrillic и посылаем // сообщение приложению, использующему // данную DLL-библиотеку if(nHotKeyCount == 3) { nHotKeyCount = 0; bCyrillic = ~bCyrillic;

// Посылаем сообщение приложению, установившему // перехватчики. В качестве параметра wParam // сообщения передаем значение флага bCyrillic PostMessage(hwndClient, WM_KBHOOK, (WPARAM)bCyrillic, 0L); } } }

// Если после клавиши <Control> была нажата любая // другая клавиша, сбрасываем счетчик else { nHotKeyCount = 0; }

// Вызываем следующий в цепочке перехватчик return CallNextHookEx(hhook, code, wParam, lParam); }




Начало  Назад  Вперед



Книжный магазин