![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| pomogite |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 24.3.2006 Репутация: нет Всего: нет |
Здравствуйте,
подскажите пожалуйста, вот есть код (взят с интернета), он отправляет окну wind нажатие клавиши "1"
Всё работает, клавиша нажимается, даже в свёрнутом окне. Раньше я делала так:
В принципе идентичные коды, но почему не работает второй вариант? Хотелось бы чтобы пользователь мог сам выбрать какую клавишу послать в окно программы. Спасибо. |
||||
|
|||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 5 Всего: 116 |
Работает, и отсылает 0 нажатий в окно, как просили. Поэтому ты и не видишь результата. LPARAM для WM_KEYDOWN посмотри, что содержит...
|
|||
|
||||
| pomogite |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 24.3.2006 Репутация: нет Всего: нет |
Пишу так -
Не нажимается так
Тыкает однёрку. так нажимает цифру 3, не обращая внимания на wparam - 49
|
||||||
|
|||||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 5 Всего: 116 |
||||
|
||||
| pomogite |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 24.3.2006 Репутация: нет Всего: нет |
В блокноте и калькуляторе да, а вот в игре видимо стоит какая-то защита.
Хотя с этим вариантом -
удачно всё отправляется, узнать бы значения - $00000031,$00020001 для других цифр и пробела, энтера. Это сообщение отредактировал(а) pomogite - 19.4.2012, 19:23 |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Биты 16-23 содержат номер клавиши на клавиатуре http://delphiworld.narod.ru/base/symbol_to..._scan_code.html -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| pomogite |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 24.3.2006 Репутация: нет Всего: нет |
Ну это понятно, что клавиша 1 это - $00000031
а второе значение? - $00020001 пишу так -
Пробел не нажимается. |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
lParam=$00390001 не?
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| pomogite |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 24.3.2006 Репутация: нет Всего: нет |
Да так работает! Спасибо огромное!!! Скажите пожалуйста, как Вы вычислили lParam пробела? И вообще как вычислять для других клавиш.
|
|||
|
||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 5 Всего: 116 |
||||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Скан код можно получить с помощью MapVirtualKey Это сообщение отредактировал(а) Чучмек - 19.4.2012, 22:56 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| pomogite |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 24.3.2006 Репутация: нет Всего: нет |
А почему тогда вот эти параметры $00000031,$00020001 посылают единицу?
|
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Скан код "1" - $02
А ansi код "1" - $31 подробней завтра, жена гонит спать. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Теперь подробнее, почему в одном случае "1" это (hwn,WM_KEYDOWN, $00000031,0) а в другом (hwn,WM_KEYDOWN, 0,$00020001)
Для блокнота не важно, где была нажата единица, важно что это единица а не "!", по этому блокнот использует wParm в котором передается ansi код символа. Для игры важно, что была нажата клавиша "1/!", но не важно, что это "!" или "1", поэтому игра использует скан-код клавиши, который передается в lParam. Вот для примера:
В memo2 будут выводится wParam и lParam при WM_KEYDOWN в memo1 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| pomogite |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 24.3.2006 Репутация: нет Всего: нет |
Спасибо большое, ещё раз, что всё понятно объяснили на пальцах! Думаю многим будет полезна данная информация.
|
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |