![]() |
Хочу поменять например нажатие клавиши 'A' на 'Q' я написал HOOK процедуру. Тело процедури поместил в DLL:
Код:
HHOOK hook = SetWindowsHookEx(WH_KEYBOARD,hookproc,hinstance,NULL); С уважением Паата |
Paata
Первый параметр keybd_event должен принимать не char, а VK_что-то. Только для букв сделано исключение -- их VK-код соотвтетствует их ASCII-коду. VK-код 179 (B0) это VK_MEDIA_NEXT_TRACK, думаю это не то что тебе было нужно... |
Спасибо что ответили,
Что это не то что мне нужно я дагадиваюсь. Может быть есть другои путь для решение проблеми? Неужели DDK надо исползвовать, для токой мальенкой проблеми? С уважением Паата |
Paata
Короче, всё что я придумал -- послать Alt, затем 1, 7, 9 на _цифровой_ клавиатуре (та, что справа), должно сработать -- когда так руками делаю работает, а программу для проверки лень писать. Т.е. код будет примерно такой: Код:
HHOOK hook = SetWindowsHookEx(WH_KEYBOARD,hookproc,hinstance,NULL); |
ivank
а разве не Alt+0179 ? по-моему, 0 надо добавить. нет? |
экспериментально установлено -- для трёхбуквенных (т.е. из трёх цифр) комбинайций это (ноль в начале) противопоказано, а для двухбуквенных пофиг.
И ещё, перед тем как посылать эти нажатия лучше ещё что б num-lock был включён -- некоторые приложения обрабатывают Alt+цифра, с намлоком это не произойдёт. |
Спасибо что ответили
Я решил эту проблему так 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) ); } работает нормално Как ви думаете С уважением Паата |
Paata
Цитата:
|
Время: 00:37. |
Время: 00:37.
© OSzone.net 2001-