Страница: 1 |
Вопрос: Перевод виртуалного кода клавиши в скан-код | Добавлено: 11.10.05 19:02 |
Автор вопроса: ![]() |
Имеем подобный код:
... CASE %WM_KEYDOWN 'lParam - Скан-Код 'при нажатии на стрелку вниз lParam (Скан-Код) получает значение 22020097 ... Так вот, как получить это число, зная только виртуальный код "стрелка вниз" тобишь 40? Какие еще параметры влияют на него? MapVirtualKey(40, 0) возвращает совсем не то |
Ответы | Всего ответов: 4 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 11.10.05 20:59 |
lParam
Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table. 0-15 Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative. 16-23 Specifies the scan code. The value depends on the OEM. 24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0. 25-28 Reserved; do not use. 29 Specifies the context code. The value is always 0 for a WM_KEYDOWN message. 30 Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up. 31 Specifies the transition state. The value is always zero for a WM_KEYDOWN message. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 12.10.05 08:11 |
Неужели IDE-мания ещё не покинула наши ряды? ![]() Вот как я реализовывал в хелпере лдя PbEdit (от сердца отрываю). ScanCode = CLng(lParam2ScanCode(lParam))
ToAscii wParam, ScanCode, KeyState(0), TransKey, 0 Function lParam2ScanCode(ByVal lParam As Long) As Byte #Register None ! MOV EAX,lParam ! SHL EAX,8 ! SHR EAX,24 ! MOV Function, AL End Function |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 12.10.05 08:14 |
Забыл переменные.
Dim ScanCode As Long, KeyState(255) As Byte, TransKey As Long
|
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 170650558 Вопросов: 12 Ответов: 46 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 18.10.05 16:22 |
Всем спасибо за помощь
вот что получилось, немного криво, но работает FUNCTION Virtual2ScanCode(BYVAL lParam AS LONG) AS LONG LOCAL lRet AS LONG lRet = MapVirtualKey(lParam, 0) ! MOV EAX, lRet ! SAL EAX, 16 SELECT CASE lParam CASE 19, 35 TO 40, 45, 46, 91 TO 93, 111, 144 'И еще пару-тройку клавиш ![]() ! BTS EAX, 24 END SELECT ! MOV FUNCTION, EAX END FUNCTION |
Страница: 1 |
|