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

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

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

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

Сообщение Timid » 10.12.2009 12:53:19

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

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

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

Очень бы помог именно исходник на FPC, а не советы вроде: "Гугли hook на Delphi"
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

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

Сообщение Bupyc » 10.12.2009 12:56:27

Эта задача явно из области написания драйверов нулевого кольца. Можно посмотреть WinDDK. Там наверняка есть примеры работы с мышью на низком уровне.
Да, и кстати, мне так кажется, что решать её будет проще на сях.
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

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

Сообщение FedeX » 10.12.2009 13:56:34

Вообще для подобных целей иногда удобно использовать DirectInput из состава MS DirectX. Получать устройства и отслеживать их в различных потоках.
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

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

Сообщение Timid » 10.12.2009 15:03:59

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

И в любом случае, я милостиво прошу пример :)
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

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

Сообщение Bupyc » 10.12.2009 15:52:22

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


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

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

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


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

P.P.S Пример на C# использующий SetWindowHookEx для перехвата событий мыши
http://blogs.msdn.com/toub/archive/2006 ... 89468.aspx
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

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

Сообщение Timid » 10.12.2009 16:43:21

2Вирус, SetWindowHookEx не хочется использовать. Вообще хуки не хочется использовать.
Но видимо придется WH_MOUSE_LL
А хотелось прямо с HID.
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

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

Сообщение Steve » 11.12.2009 19:30:56

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

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


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

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

Сообщение Timid » 12.12.2009 16:04:38

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

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

За наводку на класс HID спасибо :)
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru