![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Перекодировшик клавиатури |
|
Перекодировшик клавиатури
|
Пользователь Сообщения: 10 |
Хочу поменять например нажатие клавиши 'A' на 'Q' я написал HOOK процедуру. Тело процедури поместил в DLL:
HHOOK hook = SetWindowsHookEx(WH_KEYBOARD,hookproc,hinstance,NULL); LRESULT CALLBACK hookproc(int ncode,WPARAM wparam,LPARAM lparam) { if(ncode>=0) { DWORD S = lparam *& 0x80000000; if (wparam == 'A' ) { keybd_event ( 'Q', 0, S, 0 ); return 1; } } return ( CallNextHookEx(hook,ncode,wparam,lparam) ); } С уважением Паата |
|
------- Отправлено: 09:33, 15-04-2002 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Paata
Первый параметр keybd_event должен принимать не char, а VK_что-то. Только для букв сделано исключение -- их VK-код соотвтетствует их ASCII-коду. VK-код 179 (B0) это VK_MEDIA_NEXT_TRACK, думаю это не то что тебе было нужно... |
------- Отправлено: 17:48, 15-04-2002 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 10
|
Профиль | Отправить PM | Цитировать Спасибо что ответили,
Что это не то что мне нужно я дагадиваюсь. Может быть есть другои путь для решение проблеми? Неужели DDK надо исползвовать, для токой мальенкой проблеми? С уважением Паата |
------- Отправлено: 09:11, 16-04-2002 | #3 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Paata
Короче, всё что я придумал -- послать Alt, затем 1, 7, 9 на _цифровой_ клавиатуре (та, что справа), должно сработать -- когда так руками делаю работает, а программу для проверки лень писать. Т.е. код будет примерно такой: HHOOK hook = SetWindowsHookEx(WH_KEYBOARD,hookproc,hinstance,NULL); LRESULT CALLBACK hookproc( int ncode,WPARAM wparam,LPARAM lparam ) { * *if(ncode>=0) * *{ * * * *DWORD S = lparam *& 0x80000000; * * * *if (wparam == 'A' ) * * * * * *{ * * * * * * * *keybd_event( VK_MENU * , 0, 0, 0 ); //Это альт * * * * * * * *keybd_event( VK_NUMPAD1, 0, 0, 0 ); * * * * * * * *keybd_event( VK_NUMPAD7, 0, 0, 0 ); * * * * * * * *keybd_event( VK_NUMPAD9, 0, 0, 0 ); * * * * * * * *return 1; * * * * * *} * *} * *return ( CallNextHookEx(hook,ncode,wparam,lparam) ); } |
------- Отправлено: 10:14, 21-04-2002 | #4 |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать ivank
а разве не Alt+0179 ? по-моему, 0 надо добавить. нет? |
|
------- Отправлено: 13:17, 21-04-2002 | #5 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать экспериментально установлено -- для трёхбуквенных (т.е. из трёх цифр) комбинайций это (ноль в начале) противопоказано, а для двухбуквенных пофиг.
И ещё, перед тем как посылать эти нажатия лучше ещё что б num-lock был включён -- некоторые приложения обрабатывают Alt+цифра, с намлоком это не произойдёт. |
------- Отправлено: 17:14, 21-04-2002 | #6 |
Пользователь Сообщения: 10
|
Профиль | Отправить PM | Цитировать Спасибо что ответили
Я решил эту проблему так HHOOK hook = SetWindowsHookEx(WH_KEYBOARD,hookproc,hinstance,NULL); LRESULT CALLBACK hookproc(int ncode,WPARAM wparam,LPARAM lparam) { if(ncode>=0) { DWORD S = lparam & 0x80000000; if ( S ) S = KEYEVENTF_KEYUP; else S = 0; if ( wparam == 'A'   ![]() { //Вместо WM_KEYDOWN посилаю WM_CHAR у кого ест //фокусь ввода //Можно добавлять если SHIFT, CTRL, ALT ... нажата if ( !S ) { hwnd = GetFocus (); PostMessage ( hwnd, WM_CHAR, (WPARAM)'°', lparam ); return 1; } } return ( CallNextHookEx(hook,ncode,wparam,lparam) ); } работает нормално Как ви думаете С уважением Паата |
------- Отправлено: 06:48, 27-04-2002 | #7 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Paata
Цитата:
![]() |
|
------- Отправлено: 12:09, 27-04-2002 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
|