Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 409

/ вопрос открыт /

Здравствуйте!
В программе я с помощью хука перехватываю сообщения от клавиатуры. Можно ли как-то в обработчике хука блокировать дальнейшую передачу сообщения окнам?

AlexMPEI Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: AlexMPEI (статус: 1-ый класс)
Вопрос отправлен: 16 ноября 2009, 16:45
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 16 ноября 2009, 20:42; участников в обсуждении: 4.
Вадим К

Вадим К (статус: Академик), 16 ноября 2009, 17:04 [#1]:

просто не вызывать следующее сообщение. это конечно неверно, но...
либо заменить символ от клавиатуры на #0
Галочка "подтверждения прочтения" - вселенское зло.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 16 ноября 2009, 17:21 [#2]:

function LowLevelKeyboardProc(nCode: Integer;
WParam: WPARAM; LParam: LPARAM): LRESULT stdcall;

type
PKbdDllHookStrukt = ^TKbdDllHookStrukt;
_KBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: PDWORD;
end;
TKbdDllHookStrukt = _KBDLLHOOKSTRUCT;

begin
if nCode = HC_ACTION then
Result := CallNextHookEx(hHook, nCode, WParam, LParam);

//обработка.....

end;

не совсем понимаю как это можно подменить... когда я вызвал CallNextHookEx и посмотрел что получил, сообщение сразу рассылается всем окнам.
Вадим К

Вадим К (статус: Академик), 16 ноября 2009, 17:29 [#3]:

ну так взять и не вызывать CallNextHookEx, хотя это и не правильно.
Галочка "подтверждения прочтения" - вселенское зло.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 16 ноября 2009, 17:45 [#4]:

да, получилось, спасибо
Егор

Егор (статус: 10-ый класс), 16 ноября 2009, 19:03 [#5]:

Вадим К: а почему неправильно?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Вадим К

Вадим К (статус: Академик), 16 ноября 2009, 19:13 [#6]:

потому что хуки обрабатывают последовательно. и официально, порядок не сильно определён. И последующие хуки могут рассчитывать на то, что до них дойдет управление... а оно не приходит.
Галочка "подтверждения прочтения" - вселенское зло.
Паровоз

Паровоз (статус: 10-ый класс), 16 ноября 2009, 20:26 [#7]:

И вообще кто-то другой может делать то же самое. Тогда ваша прога также накроется.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 16 ноября 2009, 20:42 [#8]:

у меня есть всего одна прога, она работает постоянно и ничего кроме нее работать не должно. а в ней я управляю кому отдавать команды - графическому интерфейсу или элементам типа листБокс. Когда отдаю интерфейсу, листБокс не должен получить ее, даже если он в фокусе. Собственно в этом и заключалась моя проблема, т.к. до этого команду в итоге получали все :)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:40
Выполнено за 0.03 сек.