Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Лазер мышки


Автор: Ergoz 30.8.2010, 20:22
Приветствую всех. Хочу написать одну программку, но не могу разобраться как реализовать один момент.

Допустим есть 2 юсб мышки, лазерных. Которые если чуть двинул лазер загорается сильнее, через некоторое время тухнет. Так вот вопрос, как можно перехватить загорание и выключение лазера в одной мышке? Нужно отлавливать только какую то определённую мышь.. Я предполагаю что это может быть можно как то через

 SetWindowsHookEx(WH_MOUSE, @HookProc, HInstance,0) ;

Но я не знаю что именно перехватывать.. где искать материалы по возможностям перехвата таких вещей.. Нужно только загорание лазера отловить и всё... И моя программка будет закончена. 

п.с. Движение мышки не предлагать! проставлюсь пивом если поможете!

Автор: Frees 30.8.2010, 20:51
в мыши нет лазера
Вряд ли мышь информирует систему о загорании "лазера"

Автор: Ergoz 30.8.2010, 20:58
ну да, я имел ввиду светодиод этот красный, как определить програмно что он включился и выключился???
ну не думаю я что это на самой плате пропечатано в микроконтроллере... я уверен что как нибудь это сделать можно...

Автор: CodeMonkey 30.8.2010, 22:57
Никак. Эта информация не выходит за пределы мыши. Мышь обменивается с системой только пакетами данных со смещениями и нажатыми кнопками. Резона ей передавать, когда там у неё включается подсветка, как несложно догадаться - никакого.

Но вы можете угадать. Типа, через полторы секунды после последнего движения мыши. Но смысл? У одной мыши полторы, у другой две, а третья и вовсе лазерная - у неё подсветки нету.

Автор: Ergoz 30.8.2010, 23:28
просто делаю лазерную сигнализацию, как описано в этой статье: _http://www.delphiexpert.ru/view_lesson.php?id=74
но не могу придумать как сделать так чтоб можно было поставить сигналку, и в это же время спокойно работать за тем же помпьютером, а ставить отдельный серв под это нет возможности.. может вы подкините идей? Может можно как то заблокировать одну только мышку на дивжение, но обрабатывать команды, опять же только с неё? Не могу понять как именно нужную мышку определить..

Автор: CodeMonkey 31.8.2010, 13:19
Упал. Под стол. 

Автор: casinosoftguru 31.8.2010, 16:09
попробуй поискать какой нибудь usb monitor и отловить сигнал который выдает мышь если в ее "лазер" светить указкой как в видеопримере.. именно на нужном тебе порту. в идеале - придется перепаять устройство - выкинуть все ненужное из конструкции мыши и написать свой драйвер smile 
автор видеоурока использовал делфи чтобы событие отловить именно движения над кнопкой.. а к событию загорелся\потух "лазер" у мыши надо подходить имхо с другой стороны

Автор: Ergoz 31.8.2010, 21:40
ну это да) но хотелось чтоб меньше геморроя было)))

Автор: CodeMonkey 1.9.2010, 01:59
Меньше геморроя? Купите конструктор Лего со светодатчиками - получится в разы проще и (что главное) функциональнее.

Автор: Mikel 1.9.2010, 10:01
Мышка о переключении яркости светодиода сообщать не будет- это фишка самой мыши, экономия энергии. Если б можно было измерять ток соответствующего USB порта, то можно было бы и определить когда он включается ярче. Но во-первых, ток не измеряется, а есть только порог срабатывания превышения тока потребления, а во-вторых, если бы даже и измерялось, будет некорректно срабатывать при подключении еще одного устройства.

Автор: Ergoz 2.9.2010, 00:59
хорошо, тогда скажите, реально ли отследить определённую мыш, как именно определённую мышку найти, и сделать так что именно если она послала сигнал о перемещении то тогда выполнить определённый код, но блокировать от этой мышки все перемещения? но чтоб вторая мыш в это время спокойно работала и программа на неё никак не реагировала?

Автор: Mikel 2.9.2010, 08:55
Посмотрел первый ролик- изврат smile 
А вообще попробуй так- выдирай фотоэлемент из мыши, подключаешь последовательно через резистор (значение подбирается эмпирически smile ) на GND и на ногу LPT порта, и читаешь соответствующий бит порта. Имхо должно сработать.

Да, резистор ставь хотя бы 500 Ом. Если реакции от его подключения и свечения указкой не будет, уменьшай.

Автор: CodeMonkey 2.9.2010, 11:20
Цитата(Ergoz @  2.9.2010,  01:59 Найти цитируемый пост)
хорошо, тогда скажите, реально ли отследить определённую мыш, как именно определённую мышку найти, и сделать так что именно если она послала сигнал о перемещении то тогда выполнить определённый код, но блокировать от этой мышки все перемещения? но чтоб вторая мыш в это время спокойно работала и программа на неё никак не реагировала? 


Писать драйвер мыши или драйвер-фильтр. Не для вашего уровня. Купите себе лего и успокойтесь.

Автор: v1m 2.9.2010, 19:17
Цитата(Ergoz @ 30.8.2010,  23:28)
просто делаю лазерную сигнализацию, как описано в этой статье: _http://www.delphiexpert.ru/view_lesson.php?id=74
но не могу придумать как сделать так чтоб можно было поставить сигналку, и в это же время спокойно работать за тем же помпьютером, а ставить отдельный серв под это нет возможности.. может вы подкините идей? Может можно как то заблокировать одну только мышку на дивжение, но обрабатывать команды, опять же только с неё? Не могу понять как именно нужную мышку определить..

да он же там не смотрит загорается или нет(до конца не досмотрел)
он смотрит сместился ли курсор.

Автор: Ergoz 3.9.2010, 00:43
в том то и дело, а я хочу сделать иначе) вот и спрашиваю. с перемещением курсора любой может сделать))

А разве нельзя хукнуть определённую мышь? или хукается сразу всё?

Автор: CodeMonkey 3.9.2010, 00:47
В Windows не существует понятия "отдельная мышь" для прикладного уровня.

Автор: Ergoz 3.9.2010, 11:09
то есть то что я хочу сделать можно реализовать только на уровне драйвера, или пустить через компорт или как то не софтовым образом? жаль) спасибо за инфу, буду пытаться что-то придумать...

Автор: CodeMonkey 3.9.2010, 13:01
Вам уже подсказали насчёт LPT порта (и конструктора Лего smile ). Это будет в разы проще.

Автор: Ergoz 3.9.2010, 23:23
да, я уже скачал даже схему лтп порта, но ещё не совсем понял как оттуда реагировать на события, но погуглю. спс за идеи!

Автор: northener 4.9.2010, 00:14
Цитата(Ergoz @  3.9.2010,  23:23 Найти цитируемый пост)
да, я уже скачал даже схему лтп порта, но ещё не совсем понял как оттуда реагировать на события, но погуглю

Вряд ли гугль поможет. Там большинство примеров (если не все) относятся к временам MS-DOS.
А вот подходящий "конструктор ЛЕГо" (с) CodeMonkey посоветовать можно. Но нужно научиться работать с микропроцессорами. Достаточно простейших. А уж сколько интересных конструкций можно при этом сделать! Ваши знакомые будут просто в отпаде! smile 

Автор: v1m 4.9.2010, 11:04
Цитата(northener @  4.9.2010,  00:14 Найти цитируемый пост)
Вряд ли гугль поможет. 

помог...
http://www.pcports.ru/Articles.php

Автор: CodeMonkey 4.9.2010, 12:36
На самом деле много чего готового можно найти. Я как-то интереса ради программировал LCD дисплейчик на 4 текстовых строки, подключаемый к LPT. Но для практики - плюнул и взял готовую прожку.

Автор: Ergoz 4.9.2010, 16:59
вим!! спс за ссыль!!! очень интересные статьи, кто может поставьте плюс ему от меня.. поехал за резисторами и светодиодами... надо сообразить как с лпт порта остледить отсутствие луча лазерной указки, какие нужны вещи.. я не радиоэлектронщик

Автор: northener 5.9.2010, 02:28
Цитата(Ergoz @  4.9.2010,  16:59 Найти цитируемый пост)
вим!! спс за ссыль!!! очень интересные статьи, кто может поставьте плюс ему от меня.. поехал за резисторами и светодиодами... надо сообразить как с лпт порта остледить отсутствие луча лазерной указки, какие нужны вещи..

Да гугль помог!
Автор раскошелился! smile

Автор: Ergoz 5.9.2010, 04:40
Да, я уже даже продумал схему работы)) посылаем через внешнее устройство (фотоэлемент, датчик движения и др) пакет, на часть Status, оттуда программа каждые 1-2 секунды читает значение, и если оно изменилось то реагируем на это.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)