Низкоуровневый перехват событий мыши

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Низкоуровневый перехват событий мыши

Сообщение Timid »

Добрый день, господа

Требуется выполнить захват данных с мыши, по возможности до посыла сообщений Windows (вроде WM_MouseDown).
Захват должен производиться до того, как все устройства ввода "сливаются" в один поток, чтобы можно было получать данные, к примеру, от тачпада и внешней мыши, независимо.

Цель - сделать поддержку жестов на тачпаде, при этом передав все функции управления курсором Windows на внешнюю мышь (монопольно).

Очень бы помог именно исходник на FPC, а не советы вроде: "Гугли hook на Delphi"
Bupyc
постоялец
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение Bupyc »

Эта задача явно из области написания драйверов нулевого кольца. Можно посмотреть WinDDK. Там наверняка есть примеры работы с мышью на низком уровне.
Да, и кстати, мне так кажется, что решать её будет проще на сях.
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Вообще для подобных целей иногда удобно использовать DirectInput из состава MS DirectX. Получать устройства и отслеживать их в различных потоках.
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

2Fedex, DI не подойдет под условия задачи. Мне нужен как можно более хардкорный доступ к "железу".

И в любом случае, я милостиво прошу пример :)
Bupyc
постоялец
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение Bupyc »

Мне нужен как можно более хардкорный доступ к "железу".


WinDDK наше всё. Поставь его. Там есть примеры работы с устройствами ввода на си.

P.S. Как вариант можно покопать в сторону функции SetWindowsHookEx. Она позволяет ставить перехватчики в том числе и на мышиные события. Хотя, если

нужен как можно более хардкорный доступ к "железу".


то скорее всего нужно внимательно посмотреть в сторону WinDDK

P.P.S Пример на C# использующий SetWindowHookEx для перехвата событий мыши
http://blogs.msdn.com/toub/archive/2006 ... 89468.aspx
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

2Вирус, SetWindowHookEx не хочется использовать. Вообще хуки не хочется использовать.
Но видимо придется WH_MOUSE_LL
А хотелось прямо с HID.
Steve
незнакомец
Сообщения: 5
Зарегистрирован: 24.11.2009 19:58:37

Сообщение Steve »

Есть в HID.pas HIDKomponente, из библиотеки JEDI. В принципе должно импортироваться. Примеры тоже есть там.

На мой взгляд в решении вашей задачи выбран НЕ ВЕРНЫЙ путь. Вы хотите:
сделать поддержку жестов на тачпаде, при этом передав все функции управления курсором Windows на внешнюю мышь


Тут возникают 2 проблемы:
1) touchpad в ноутбуках работает через PS/2(на всех ноутах наверное) :lol:
2) HID - это USB устройство, и на его монопольный захват нет инструкций, т.е. драйвер в любом случае получит и обработает сообщения.
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

2 Steve
Тут возникают 2 проблемы:

Неправда ваша, есть проект Multi-Touch Vista, там как раз реализован "подменный" функционал, когда все позиционные устройства можно подключить как каналы устройства мультисенсорного ввода. И нам такое нужно, на паскале ;)

За наводку на класс HID спасибо :)
Ответить