| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Отловить нажатие клавиши |
| Автор: Tamerlann 7.2.2004, 10:12 |
| Как программа может отловить нажатие клавиши на клавиатуре так, чтобы затем другие приложения и окна не получили сообщение, что нажата эта клавиша? Я так понимаю, что кроме всего прочего, отлавливающая программа должна иметь более высокий приоритет, чем остальные, от которых скрывается нажатие (остальными судя по всему будут все приложения обычно запускаемые под Виндой, т.е. приоритет - средний). Как поднять приоритет? (прошу не счесть за два вопроса в одном топике - второй вопрос - часть глобального первого Иными словами (по поводу второго вопроса), кажется, вообще получится что-то вроде драйвера. |
| Автор: Paradox 7.2.2004, 10:27 |
| Наверное ловить WM_KEYDOWN или WM_KEYPRESS |
| Автор: Tamerlann 7.2.2004, 10:29 |
| Отловить то само нажатие я смогу, как не отдать его другим приложениям? |
| Автор: mmv 7.2.2004, 18:35 | ||
| Этот вопрос меня тоже интересует. Только дело тут не в приоритете. Его-то повысить просто: Например:
Выше среднего и ниже среднего - я отловить не смог. В хелпе есть, но видно, я что-то не понимаю... Однако суть в том, что это ни фига не влияет на перекрытие клавиш. Это я проверял. Тут нужно прежде всего разобраться в теоретическом аспекте, но он-то как раз для меня остается загадкой. Я тоже в свое время пытался отловить сочетания клавиш, перекрываемые игрушкой. Но потерпел неудачу. Буду вместе с вами с интересом ждать новых ответов. |
| Автор: StayAtHome 7.2.2004, 20:17 |
| Нужно использовать Hooks -- скачай FAQ от Vit'a? там есть исчерпывающая информация по этой теме. (И не только по этой |
| Автор: mmv 8.2.2004, 00:29 | ||
Если упрощенно, то я делал примерно так:
|
| Автор: Tamerlann 8.2.2004, 09:46 |
| Точно, в FAQ есть два примера hook'a, но что-то я не понял как они работают. (может кто объяснит |
| Автор: mmv 9.2.2004, 01:40 | ||||
А само задание приоритета я забыл написать. Вот оно:
|
| Автор: dm9 9.2.2004, 01:46 |
| Я уже устал эту ссылку давать http://delphimaster.ru/articles/hooks/index.html |
| Автор: Tamerlann 9.2.2004, 21:26 |
| Спасибо, dm9. Если кто-нибудь ещё знает где почитать про это, то я не откажусь от дополнительных ссылок. Спасибо, mmv, за приоритеты (описание установления). Осталась нам сама малость... :разобраться с hook'ом |
| Автор: Tamerlann 11.2.2004, 21:24 |
| Статья, указанная dm9, действительно подробно описывает ловушки и механизм их работы, но в ней я не нашёл ответа на вопрос: а как же отменить событие, т.е. убрать само сообщение из очереди, чтобы оно не было передано окну (приложению). |
| Автор: <Spawn> 11.2.2004, 21:26 | ||||
|
| Автор: Tamerlann 11.2.2004, 21:33 |
| Sorry, не понял. Можно просто попдробнее описать?, пожалуйста. (т.е. как работает) |
| Автор: Tamerlann 11.2.2004, 21:45 |
| Только-что попробовал то, что предложил <Spawn> - всё просто великолепно работает!!!! Большое! спасибо, <Spawn>. Но всё же, что это за Result? |
| Автор: <Spawn> 11.2.2004, 21:51 | ||
Я не помню как обстоят дела с WH_KEYBOARD, но для WH_CBT хука, в зависимости от результата выполнения функции хука, разрешается или запрещается операция. Так что попробуй что то типа этого:
|
| Автор: <Spawn> 11.2.2004, 21:53 | ||
Вот и хорошо))) Result - это результат выполнения функции(иначе говоря это переменная ассоциированная с результатом выполнения функции и имеющая тип указаный при определении функции, например function a: Boolean;), в данном случае функции KeyBoardProc. Можно было бы воспользоваться паскалевским способом и написать KeyBoardProc := 1, но так более наглядно)) |
| Автор: BLACK_KOT 3.11.2007, 00:10 | ||||||
а если у меня нет цепочки хуков- а тока 1 хук? куда управление передавать? вот мой код:
прога имитирует нажатие буквы О, а как отменить нажатие реальной клавиши? |