Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 154 155 156 [ 157 ] 158 159 160 ... 210


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). Если эти координаты совпадают, то вызывается хранитель экрана. Для отслеживания движения



1 ... 154 155 156 [ 157 ] 158 159 160 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика