![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| demetriss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
Привет всем!
Господа программисты, помогите решить задачу: - программная блокировка выбранной физической мыши, подключенной по USB (а в идеале и PS/2), с минимальной задержкой ОС: Windows XP Поковырявшись в инете нашёл способ программного отключения устройства, как это происходит в диспетчере устройств, при помощи ключевой пары API-функций SetupDiSetClassInstallParams и SetupDiCallClassInstaller. Этот способ работает, но на отключение устройства уходит 250-300 мс, что очень долго. Пришла мысль не отключать устройство, а блокировать. То есть, написать небольшую длл'ку, которая бы фильтровала сообщения от мыши типа WM_MOUSEMOVE, WM_LBUTTONDOWN, и т.д. И всё хорошо, время "отключения"/"включения" фактически нулевое. Но есть проблема, как узнать, какая мышь отправила это сообщение? Как это определить на уровне сообщений Windows? Это сообщение отредактировал(а) demetriss - 14.6.2010, 22:35 |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
||||
|
||||
| demetriss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
RomanEEP, спасибо за участие.
Внимательно изучил присланную ссылку: http://delphi.about.com/od/windowsshellapi/a/mousehook.htm Примерно таким образом сейчас и реализован функционал в фильтре-блокираторе - через хук на мышь. Порыскав по ссылке не смог найти ответ на свой вопрос - как узнать от какой из физически подключенных мышей пришло сообщение. |
|||
|
||||
| demetriss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
На данный момент нашёл любопытную функцию GetMessageExtraInfo, которая возвращает дополнительную информацию о текущем сообщении.
Но индетификатор мыши из неё не вытащить, к сожалению. |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
Невнимательно смотрел прочитал твой вопрос в первый раз.
В так случае попробуй перехватить WM_INPUT http://msdn.microsoft.com/en-us/library/ms645590(VS.85).aspx Как я понял тут http://msdn.microsoft.com/en-us/library/ms...2(v=VS.85).aspx В этом сообщении приходит адрес на интересную структуру http://msdn.microsoft.com/en-us/library/ms...1(v=VS.85).aspx тут думаю все что тебе нужно. Если хандла на устройства мало, то так можно узнать подробности: http://msdn.microsoft.com/en-us/library/ms...7(v=VS.85).aspx Добавлено через 3 минуты и 47 секунд ЗЫ: Второй вариант - подменить драйвер мыши. И передавать какой-нить флаг в dwExtraInfo. Исходники оригинального лежат в Win3d DDK. Минусы: Будет пахать только в XP, работает только для PS/2 мыши. |
|||
|
||||
| demetriss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
Эх, что-то у меня никак не хотят сегодня открываться мсдновские ссылки, похоже какая-то проблема с местными интернетами
RomanEEP, насчёт драйвера я тоже думал, но хотелось бы попроще. Спасибо за ссылки! Попробую позже ещё раз тыкнуться Добавлено через 5 минут и 20 секунд Кстати, поиск по WM_INPUT вывел на любопытный тред: http://www.delphimaster.ru/cgi-bin/forum.p...1950542&n=5 Вроде похоже на то, что мне нужно. |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |