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


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


if(wHeapSize != 0) // Расфиксируем сегмент данных UnlockData(0);

// Запоминаем идентификатор модуля DLL-библиотеки hInst = hInstance;

// Определяем расположение ресурсов hResource = FindResource(hInstance, "XlatTable", "XLAT"); hResourceCaps = FindResource(hInstance, "XlatTableCaps", "XLAT");

// Получаем идентификаторы ресурсов hXlatTable = LoadResource(hInstance, hResource); hXlatTableCaps = LoadResource(hInstance, hResourceCaps);

// Фиксируем ресурсы в памяти, получая их адрес lpXlatTable = (char far *)LockResource(hXlatTable); lpXlatTableCaps = (char far *)LockResource(hXlatTableCaps);

// Если адрес равен NULL, при загрузке или // фиксации одного из ресурсов произошла ошибка if(lpXlatTable == NULL lpXlatTableCaps == NULL) { return(0); }

// Выключаем клавишу <Caps Lock>. Для этого // получаем и записываем в массив aKeyStates состояние // клавиатуры, затем изменяем состояние нужной нам // клавиши, используя ее виртуальный код как индекс GetKeyboardState(aKeyStates); aKeyStates[VK_CAPITAL] = 0; SetKeyboardState(aKeyStates);

// Возвращаем 1. Это означает, что инициализация // DLL-библиотеки выполнена успешно return 1; }

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

#pragma argsused int CALLBACK WEP(int bSystemExit) { // Расфиксируем и освобождаем ресурсы UnlockResource(hXlatTable); FreeResource(hXlatTable); UnlockResource(hXlatTableCaps); FreeResource(hXlatTableCaps);

return 1; }

// ======================================================== // Функция SetKbHook // Устанавливает системные перехватчики на сообщения, // поступающие от клавиатуры, и на системную // очередь сообщений // ========================================================

extern "C" void WINAPI _export SetKbHook(HWND hwnd) { // Устанавливаем перехватчики только // в том случае, если они не были // установлены ранее if(!bHooked) { // Установка перехватчика на сообщения, // поступающие от клавиатуры hhook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KbHookProc, hInst, NULL);




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



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