![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 88
|
![]()
Здраствуйте. Не уверен, что правильно назвал тему(не знаю как иначе назвать). Стоит задача - с помощью прерываний(или любым другим образом, но желательно с помощью winapi, хотя и не обязательно) подменить одну клавишу другой. Как-то так. Что меется ввиду? Например, я жму клавишу F система должна "думать", что я нажал, например, клавишу L и наоборот. Ну или если я нажал Enter, то система должна реагировать так, как будто это было нажатие Escape. То есть для двух любых клавиш нужно сделать смену ролей
![]() Ссылки и примеры кода приветсвуются. Заранее спасибо. Последний раз редактировалось lowercase; 19.12.2012 в 20:17. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,369
|
![]()
Можно сделать другую раскладку клавиатуры, либо через клавиатурный драйвер.
|
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
![]()
Алгоритм такой:
Читаешь про 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(), иначе уйдешь в цикл. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Прерывания | 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 20: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 |