Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Вниз

Как правильно обрабатывать сообщения от клаватуры?   Найти похожие ветки 

 
fag2000@ok.ru   (2002-03-05 14:44) [0]

Скачал пример HOOK"а ( Большое спасибо авторам)( http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988619882&n=15) В принципе все работает только есть маленькая проблема: коды нажатия клавиш передаются не всегда верно(При любой раскладке и любом регистре идут коды больших латинских букв).
//код Hook"а
Function KeyboardHook(Code: Integer; ParamW: WPARAM; ParamL: LPARAM): LRESULT;stdcall;
Begin
If Code IN [HC_ACTION, HC_NOREMOVE] Then
Begin
SendMessage(ShareInf^.AppWndHandle, WM_USER, ParamW, Code);
End;
Result := CallNextHookEx(ShareInf^.OldHookHandle, Code, ParamW, ParamL)
End;

//Код обработчика
Procedure TMainForm.WMUser(var Message: TMessage);
Begin
Memo1.Lines.Add("Code: "+IntToStr(Message.WParam)+"; Char: "+Chr(Message.wParam));
End;


 
Fellomena   (2002-03-05 15:44) [1]

Chr(Lo(Message.wParam))
(или Low - точно не помню 8)


 
fag2000@ok.ru   (2002-03-05 15:49) [2]

Работает как раньше.:-(


 
Sasha9   (2002-03-05 18:10) [3]

попробуй поставить хук WH_CALLWNDPROC или WH_CALLWNDPROCRET на отлов всех сообщений и обрабатывай только WM_KEYXXX


 
Raptor   (2002-03-05 22:11) [4]

Коды передаются верно, ведь то, что там выводится, это виртуальные коды клавиш а не конкретные символы. Получить символы не так просто, но тем не менее вся нужная для этого информация передается в хук в lParam.

wParam
Specifies the virtual-key code of the key that generated the keystroke message.
lParam
Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag. This parameter can be a combination of the following values:
Value Description
0–15 - Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user"s holding down the key.
16–23 - Specifies the scan code. The value depends on the original equipment manufacturer (OEM).
24 - Specifies whether the key is an extended key, such as a function key or a key on the numeric keypad. The value is 1 if the key is an extended key; otherwise, it is 0.
25–28 - Reserved.
29 - Specifies the context code. The value is 1 if the alt key is down; otherwise, it is 0.
30 - Specifies the previous key state. The value is 1 if the key is down before the message is sent; it is 0 if the key is up.
31 - Specifies the transition state. The value is 0 if the key is being pressed and 1 if it is being released.

Имея эту информацию можно получить символы. Я сам лично этим не занимался, но советую посмотреть функцию ToAsciiEx().



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
3-26013
Mike S
2002-04-16 11:34
2002.05.09
Импорт в IB6


7-26281
stx
2002-02-08 11:50
2002.05.09
usb 2.0


1-26118
IDL
2002-04-24 12:54
2002.05.09
Закрытие проги после закрытия ПОСЛЕДНЕГО окна?


1-26152
SP
2002-04-24 14:05
2002.05.09
ListView в виде дерева


3-25995
Практик
2002-04-12 19:53
2002.05.09
Поделитесь примерами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский