Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Перекодировшик клавиатури

Ответить
Настройки темы
Перекодировшик клавиатури

Пользователь


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Хочу поменять например нажатие клавиши '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) );
}
Это все работает нормально все работаюшие про-ги получают при нажатие клавиши 'A' букву 'Q'. *А как поступить если хочу клавиши 'A' поменять на букву у кого ASCII code например 176. keybd_event не работает. Может быть по другомо нада сделать?


С уважением Паата

-------
Paata


Отправлено: 09:33, 15-04-2002

 

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Paata
Первый параметр keybd_event должен принимать не char, а VK_что-то. Только для букв сделано исключение -- их VK-код соотвтетствует их ASCII-коду. VK-код 179 (B0) это VK_MEDIA_NEXT_TRACK, думаю это не то что тебе было нужно...

-------
http://ivank.ru


Отправлено: 17:48, 15-04-2002 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо что ответили,
Что это не то что мне нужно я дагадиваюсь. Может быть есть другои путь для решение проблеми?

Неужели DDK надо исползвовать, для токой мальенкой проблеми?


С уважением Паата

-------
Paata


Отправлено: 09:11, 16-04-2002 | #3


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить 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) );
}
Хотя нажатия ещё и релизить надо будет... Но примерно так.

-------
http://ivank.ru


Отправлено: 10:14, 21-04-2002 | #4


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


ivank
а разве не Alt+0179 ?
по-моему, 0 надо добавить.
нет?

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 13:17, 21-04-2002 | #5


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


экспериментально установлено -- для трёхбуквенных (т.е. из трёх цифр) комбинайций это (ноль в начале) противопоказано, а для двухбуквенных пофиг.

И ещё, перед тем как посылать эти нажатия лучше ещё что б num-lock был включён -- некоторые приложения обрабатывают Alt+цифра, с намлоком это не произойдёт.

-------
http://ivank.ru


Отправлено: 17:14, 21-04-2002 | #6


Пользователь


Сообщения: 10
Благодарности: 0

Профиль | Отправить 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) );
}

работает нормално

Как ви думаете


С уважением Паата



-------
Paata


Отправлено: 06:48, 27-04-2002 | #7


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Paata
Цитата:
Как ви думаете
Работает -- и хорошо

-------
http://ivank.ru


Отправлено: 12:09, 27-04-2002 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Перекодировшик клавиатури

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено




 
Переход