Несколько зацепок клавиатуры в .NET и Delphi - PullRequest
1 голос
/ 29 августа 2010

У меня есть приложение с компонентами .NET и Delphi. Я прописываю на хук клавиатуры (с SetWindowsHookEx) в обоих компонентах. Сначала я регистрируюсь в .NET, а потом в Delphi.

Проблема в том, что делегат ловушки вызывается в Delphi перед делегатом ловушки в .NET.

Согласно MSDN, цепочка подключений - это просто список, и, насколько я понимаю, делегаты должны вызываться в соответствии с порядком регистрации.

Кто-нибудь имеет представление о том, что здесь происходит? Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 29 августа 2010

Вы неправильно поняли. Обзор hook в MSDN описывает это следующим образом (выделение добавлено):

Функция SetWindowsHookEx всегда устанавливает процедуру подключения в начале цепи подключения. Когда происходит событие, которое отслеживается определенным типом ловушек, система вызывает процедуру в начале цепочки ловушек, связанной с ловушкой. Каждая подключаемая процедура в цепочке определяет, передавать ли событие следующей процедуре. Подключаемая процедура передает событие следующей процедуре, вызывая функцию CallNextHookEx .

Следовательно, это именно ожидаемое поведение, если ваш хук Delphi установлен последним и вызывается первым. Там вообще ничего не происходит.

1 голос
/ 29 августа 2010

Список подключений - это не список, а цепочка.Вновь установленный хук сохраняет ссылку на предыдущий.Это означает, что хук, установленный позже, всегда выполняется перед хуком, установленным ранее.

...