|
Программирование >> Перегруженные имена функций и идентификаторы
KEYBLAY=1; Alt+Shift if(strcmp(cResult, 2 )==0) KEYBLAY=2; Ctrl+Shift RegCloseKey(pOpenKey); else MessageBox(0, Не могу получить данные о способе переключения раскладки клавиатуры , Внимaние! ,MB ICONERROR); ------------- Есть ли активный хранитель экрана if(!SystemParametersInfo(SPI GETSCREENSAVEACTIVE,0,&bSCRSAVEAC TIVE,0)) MessageBox(0, Не могу получить данные об установленном хранителе экрана , Внимaние! ,MB ICONERROR); return 1; Этот код позволяет узнать способ переключения языка и установить факт наличия активного хранителя экрана. Обратите внимание на то, что этот код выполняется только когда библиотека проецируется на адресное пространство процесса - проверяется условие (reason==DLL PROCESS ATTACH). Функция ловушки клавиатуры Функция ловушки в общем виде имеет следующий синтаксис: LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam), где: HookProc - имя функции; nCode - код ловушки, его конкретные значения определяются типом ловушки; wParam, lParam - параметры с информацией о сообщении. В случае нашей задачи функция должна определять состояние клавиш Alt, Ctrl и Shift (нажаты или отпущены). Информация об этом берётся из параметров wParam и lParam. После определения состояния клавиш надо сравнить его со способом переключения языка (определяется в функции входа). Если текущая комбинация клавиш способна переключить язык, то надо выдать звуковой сигнал. Всё это реализует примерно такой код: LRESULT CALLBACK KeyboardHook(int nCode,WPARAM wParam,LPARAM lParam) { Ловушка клав. - биканье при перекл. раскладки if((lParam>>31)&1) Если клавиша нажата... switch(wParam) { Определяем какая именно case VK SHIFT: {iShiftKey=UP; break}; case VK CONTROL: {iCtrlKey=UP; break}; case VK MENU: {iAltKey=UP; break}; else Если была отпущена... switch(wParam) { Определяем какая именно case VK SHIFT: {iShiftKey=DOWN; break}; case VK CONTROL: {iCtrlKey=DOWN; break}; case VK MENU: {iAltKey=DOWN; break}; -------------- switch(KEYBLAY) В зависимости от способа переключения раскладки case 1: Alt+Shift if(iAltKey==DOWN && iShiftKey==UP) vfBeep(); iShiftKey=RESET; if(iAltKey==UP && iShiftKey==DOWN) vfBeep(); iAltKey=RESET; ((iAltKey==UP && iShiftKey==RESET)(iAltKey==RESET && iShiftKey==UP)) { iAltKey=RESET; iShiftKey=RESET; break; ------------------------------------case 2: Ctrl+Shift if(iCtrlKey==DOWN && iShiftKey==UP) vfBeep(); iShiftKey=RESET; if(iCtrlKey==UP && iShiftKey==DOWN) vfBeep(); iCtrlKey=RESET; if((iCtrlKey==UP && iShiftKey==RESET)(iCtrlKey==RESET && iShiftKey==UP)) { iCtrlKey=RESET; iShiftKey=RESET; return 0; Звуковой сигнал выдаётся такой небольшой функцией: void vfBeep() { Биканье MessageBeep(-1); MessageBeep(-1); Два раза - для отчётливости Функция ловушки мыши Эта функция отслеживает движение курсора мыши, получает его координаты и сравнивает их с координатами правого верхнего угла экрана (0,0). Если эти координаты совпадают, то вызывается хранитель экрана. Для отслеживания движения
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |