Крючок для клавиатуры Delphi - PullRequest
1 голос
/ 03 февраля 2009

У меня возникла интересная проблема с реализацией глобальной клавиатуры.

Я написал DLL, которая используется для установки хука, а затем приложение (Delphi), которое загружает DLL и обрабатывает результаты хука. Это было сделано сегодня днем ​​на моем ПК на работе, и после некоторого тестирования я понял, что он работает на 100%.

Я только что протестировал то же самое приложение и dll здесь дома, и я не получаю никаких ошибок, но приложение, похоже, также не получает никаких данных.

Обе машины - WinXP, хотя моя рабочая машина - SP2, а эта - SP3.

Произошли ли некоторые изменения в Win32 API, которые могли бы вызвать сбои в работе, или проблема могла быть связана с некоторыми обновлениями A / V / Spyware / MS, которые были недавно выпущены?

Я надеюсь, что кто-то здесь узнает об очевидной причине, что это может произойти, прежде чем я потрачу часы на отладку.

Спасибо!

Ответы [ 5 ]

2 голосов
/ 03 февраля 2009

На самом деле некоторые A / V не любят самодельные крючки. У меня та же проблема с моей мышью на некоторых машинах, и это не зависит от версии пакета обновления.

0 голосов
/ 06 февраля 2009

Одной из альтернатив является использование низкоуровневой клавиатуры. (Просто другой параметр для SetWindowsHookEx). Хук обрабатывается в цикле сообщений регистрирующего потока, и, таким образом, не нужно везде вводить dll. И по какой-то странной причине VirusScanners / Firewalls мешают ему гораздо меньше. Они часто молча блокируют dllinjection или нормальные зацепки. Также устраняет необходимость совместного использования hHook между процессами, если вы хотите, чтобы он работал в старых версиях Windows. И если вы злоупотребляете клавиатурным трюком для реализации глобальных горячих клавиш (часто видели), используйте взамен RegisterHotkey / http://msdn.microsoft.com/en-us/library/ms646309.aspx).

0 голосов
/ 04 февраля 2009

Какой вид крючка вы используете? Однажды я использовал WH_CBT -тип и столкнулся с проблемами при работе некоторых других приложений. Один случай, который я мог бы проследить до Триллиана, который, кажется, также делает некоторый перехват (и, возможно, облажается).

Кроме того, в настоящее время я работаю над приложением, использующим WH_KEYBOARD -hook, и оно одинаково хорошо работает на SP2 и SP3. MSDN также не упоминает никаких изменений, связанных с пакетом обновления.

Что вы можете сделать, чтобы отследить ошибку на вашем домашнем компьютере:

  • не забудьте проверить все значения результатов всех системных вызовов API (и использовать GetLastError в случае ошибки)
  • предоставляет какой-либо отладочный вывод в случае ошибки (например, в виде окна сообщения или в текстовый файл)
  • необязательно: регистрируйте некоторые сообщения о состоянии, чтобы вы знали, что происходит внутри
0 голосов
/ 03 февраля 2009

Да, я мог бы. Я не установил Delphi на эту машину, но думаю, что мне придется. Я иду за низко висящие фрукты здесь. Если есть очевидный ответ, нет необходимости проходить через все проблемы отладки и в надежде найти, в чем может быть проблема.

Мое первое подозрение в том, что где-то произошли изменения в API.

Как я уже говорил, это приложение прекрасно работает на моей рабочей машине.

0 голосов
/ 03 февраля 2009

У вас есть отладчик на домашнем компьютере? Вы получаете какие-либо сообщения через крючок вообще? Может ли быть так, что какое-то другое приложение подключается и не передает сообщение по цепочке подключений?

Кстати: я люблю виртуальные машины для такого рода тестирования. Держите чистую установку XP. Установите SP2 и протестируйте свое приложение. Откатитесь до чистой установки снова и установите SP3. Попробуйте ваше приложение еще раз. Таким образом, вы будете знать, если это SP3, так как больше нечего портить. Мне нравится хранить множество снимков с различными конфигурациями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...