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


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


// ================================================ // DLL-библиотека kbhook.dll // Устанавливает перехватчики на сообщения, // поступающие от клавиатуры и на системную // очередь сообщений. // Если нажать подряд 3 раза клавишу <Control>, // изменится раскладка клавиатуры // ================================================

#define STRICT #include <windows.h> #include "kbhook.hpp"

// ----------------------------------------------- // Глобальные переменные // -----------------------------------------------

// Идентификатор модуля DLL-библиотеки static HINSTANCE hInst;

// Идентификатор окна приложения, установившего // перехватчики static HWND hwndClient;

// Идентификаторы перехватчиков static HHOOK hhook = 0; static HHOOK hhookMsg = 0;

// Флаг переключения на русскую клавиатуру static BOOL bCyrillic = FALSE;

// Флаг установки перехватчиков static BOOL bHooked = FALSE;

// Счетчик static int nHotKeyCount = 0;

// Массив для записи состояния клавиатуры BYTE aKeyStates[256];

// Указатели на таблицы перекодировки, // которые будут загружены из ресурсов static char far * lpXlatTable; static char far * lpXlatTableCaps;

// Положение ресурсов в файле static HRSRC hResource; static HRSRC hResourceCaps;

// Идентификаторы таблиц перекодировки static HGLOBAL hXlatTable; static HGLOBAL hXlatTableCaps;

// ----------------------------------------------- // Прототипы функций // -----------------------------------------------

extern "C" LRESULT CALLBACK KbHookProc(int code, WPARAM wParam, LPARAM lParam);

extern "C" LRESULT CALLBACK MsgHookProc(int code, WPARAM wParam, LPARAM lParam);

// ======================================================== // Функция LibMain // Получает управление только один раз при // загрузке DLL-библиотеки в память // ========================================================

#pragma argsused int CALLBACK LibMain(HINSTANCE hInstance, WORD wDataSegment, WORD wHeapSize, LPSTR lpszCmdLine) { // После инициализации локальной области данных // функция LibEntry фиксирует сегмент данных. // Его необходимо расфиксировать.


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