Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 19.12.2012, 20:14   #1
lowercase
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 88
По умолчанию Прерывания

Здраствуйте. Не уверен, что правильно назвал тему(не знаю как иначе назвать). Стоит задача - с помощью прерываний(или любым другим образом, но желательно с помощью winapi, хотя и не обязательно) подменить одну клавишу другой. Как-то так. Что меется ввиду? Например, я жму клавишу F система должна "думать", что я нажал, например, клавишу L и наоборот. Ну или если я нажал Enter, то система должна реагировать так, как будто это было нажатие Escape. То есть для двух любых клавиш нужно сделать смену ролей
Ссылки и примеры кода приветсвуются.
Заранее спасибо.

Последний раз редактировалось lowercase; 19.12.2012 в 20:17.
lowercase вне форума Ответить с цитированием
Старый 19.12.2012, 23:57   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,000
По умолчанию

Можно сделать другую раскладку клавиатуры, либо через клавиатурный драйвер.
waleri вне форума Ответить с цитированием
Старый 21.12.2012, 01:19   #3
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,155
По умолчанию

Алгоритм такой:

Читаешь про HHOOK WINAPI SetWindowsHookEx(
_In_ int idHook,
_In_ HOOKPROC lpfn,
_In_ HINSTANCE hMod,
_In_ DWORD dwThreadId
);

idHook делаешь равным WH_KEYBOARD_LL.

Потом в LowLevelKeyboardProc() в параметре lParam получаешь ссылку на структуру:

typedef struct tagKBDLLHOOKSTRUCT {
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT;

Ee модифицуруешь как хочешь, и через CallNextHookEx() отправляешь дальше по цепочке хуков.

Правда, я не знаю, позволит ли система так в лоб изменить/подменить lParam.

Если нельзя, то в LowLevelKeyboardProc генерирушь свое событие клавиатуры через keybd_event(), и возвращашь какой-нить мусор, кроме нуля.
Только в этом случае надо проверить, чтобы не было флага LLKHF_INJECTED, если есть - возвращать ноль, или, как надо делать правильно, вызывать CallNextHookEx(), иначе уйдешь в цикл.
Smogg вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания kolyan147 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 13.06.2012 23:55
прерывания lilek Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 14.12.2010 21:44
Прерывания alexdrew Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.05.2010 00:38
прерывания sergei64_89 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.04.2008 13:37