PDA

Просмотр полной версии : Mouse autodetect



Sinus
04.02.2006, 16:05
ууу.. и действительно, память отшибла.
напомните плиз как грамотно заавтодетектить наличие/щтсутствие kempston mouse.

только это, я знаю, в ранних определялках глюк такой был- покуда мышой не дёрнешь, она не определится.

так вот мне бы правильный метод ^_~

CityAceE
04.02.2006, 17:02
Так ведь вроде нет способа достоверного определения мыши...

SMT
04.02.2006, 18:02
ну да, если движений не было, из всех портов читается FF, т.е. как установились счётчики при включении. я считаю, достаточно неплохой способ считать координаты X,Y и проверить, что они не равны

SMT
04.02.2006, 18:11
собственно, мне даже пришлось в коде эмулятора начальные значения координат мыши делать разные при включении, иначе половиной софта мышь не распознавалась

Знахарь
04.02.2006, 18:50
Оригинально...

Sinus
04.02.2006, 19:15
короче ясно что ничего не ясно ^_~
походу самая лучшая определялка- это

Press:
1. Mouse Enable
2. Mouse Disable

;)

SMT
04.02.2006, 20:09
походу самая лучшая определялка- это
Press:
1. Mouse Enable
2. Mouse Disable
да нет. по любому, мышь хоть чуть сдвинется после включения. ну разве что на неё не дышать...

axor
04.02.2006, 22:00
ну разве что на неё не дышать...
Или она с шариком :)

Sinus
04.02.2006, 23:41
по поводу: "она по любому сдвинеться".
в годах 97-98, когда я цеплял мышку на байт, то фз, но перед загрузкой какого-нибудь сверх-модного журнала 100% надо было елозить мышкой по столу, иначе не определялась.

CityAceE
05.02.2006, 04:50
походу самая лучшая определялка- это

Press:
1. Mouse Enable
2. Mouse Disable
Ещё лучше просить нажать левую кнопку мыши, ибо есть разные варианты схем по какому биту читается левая кнопка. А так сразу два зайца убиваем: определяем наличие мыши и положение левой кнопки.

rasmer
05.02.2006, 10:23
Ещё лучше просить нажать левую кнопку мыши, ибо есть разные варианты схем по какому биту читается левая кнопка. А так сразу два зайца убиваем: определяем наличие мыши и положение левой кнопки.Ну типа как сделано во многом - первая нажатая и есть файр...

fk0
22.02.2006, 16:27
напомните плиз как грамотно заавтодетектить наличие/щтсутствие kempston mouse.

Никого не слушай, все врут.

НАЛИЧИЕ МЫШИ ОПРЕДЕЛИТЬ НЕВОЗМОЖНО!

Возможно определить только её отсутствие.

fk0
22.02.2006, 16:29
ну да, если движений не было, из всех портов читается FF, т.е. как установились счётчики при включении. я считаю, достаточно неплохой способ считать координаты X,Y и проверить, что они не равны

Убивать за такое. Ибо и FF -- это раз. И всякие левые часы вместо мышей и прочие программаторы -- два.

Знахарь
22.02.2006, 17:04
fk0 всех в газенваген хочет ?

Скажи тогда лучше нам глупым КАК ЖЕ РЕШИТЬ ПРОБЛЕМУ...

А мочить все могут... особенно в детстве :)

fk0
22.02.2006, 17:23
Скажи тогда лучше нам глупым КАК ЖЕ РЕШИТЬ ПРОБЛЕМУ...

Сказано же -- ОПРЕДЕЛИТЬ НАЛИЧИЕ МЫШИ НЕВОЗМОЖНО!

возможно только определить её отсутствие

факт отсутствия мыши определяется по хаотичным перемещениям
за разумный (0.1сек) период времени и нажиманию кнопок. Стоит на месте и кнопки не нажимаются -- мышь или есть или нет. В противном случае -- точно нет.

SMT
22.02.2006, 19:35
И всякие левые часы вместо мышей и прочие программаторы -- двану скажи, кто делал девайс на мышиных портах, причем порты на чтение x и y давали бы разные значения? можешь дать любую ссылку - в инете, на сообщение фидо, в спековских журналах. смогёшь?

Spectre
29.03.2006, 15:38
Я делал достаточно надежный опрос наличия Kempston Mouse (и джойстик аналогично можно определять) так:

В цикле, который крутится примерно 5 прерываний (чем больше тем лучше), читаем порт кнопок мыши. Проверяем чтобы ни одна из 3-х кнопок не была нажата. Если мышка реальная, то это условие выполнится, если же из порта читается мусор, тогда мышки нет. Код:



LD HL,5000
LD BC,#FADF
DETECT IN A,(C)
CPL
AND 7
JR NZ,NO_MOUSE
DEC HL
LD A,H
OR L
JR NZ,DETECT

fk0
29.03.2006, 16:15
Если мышка реальная, то это условие выполнится, если же из порта читается мусор, тогда мышки нет.

Если мыши нет, то условие тоже может выполняться. Типичный случай: #FF везде.

Spectre
08.04.2006, 16:31
Если мыши нет, то условие тоже может выполняться. Типичный случай: #FF везде.

Справедливое замечание. Но зачем вообще обычно определяют мышку в программе? Чтобы не завесить программу, которая постоянно отрабатывает ложные нажатия кнопок несуществующей мышки. То есть если мышки у пользователя нет, а из порта кнопок постоянно читается что кнопки не нажаты (#FF), то это нормальная ситуация и наша программа глючить не будет.

Jukov
08.04.2006, 21:20
На компьютерах с шиной данных не подтянутой к +5В из портов каждый раз можно считать абсолютно непредсказуемое значение. Поэтому автоматически определить наличие мышы однозначно нельзя.

Spectre
09.04.2006, 00:56
На компьютерах с шиной данных не подтянутой к +5В из портов каждый раз можно считать абсолютно непредсказуемое значение. Поэтому автоматически определить наличие мышы однозначно нельзя.

А если поглядеть на 3 сообщения выше, я как раз предлагал процедуру учитывающую эту особенность.

Jukov
09.04.2006, 14:04
А если поглядеть на 3 сообщения выше, я как раз предлагал процедуру учитывающую эту особенность.
Да, этот фокус может сработать. Но ведь вместо мыши по данному порту может откликнутся и другое устройство с грубой дешифрацией, у которого может и не быть ситуации, когда три или два бита = 0.
А вот ещё вариант без автоопределения: попросить пользователя нажать, например, кнопку ОК в центре экрана. Если в течение 5 сек он её нажмёт - мыша есть.

Spectre
14.04.2006, 11:32
Да, этот фокус может сработать. Но ведь вместо мыши по данному порту может откликнутся и другое устройство с грубой дешифрацией, у которого может и не быть ситуации, когда три или два бита = 0.

Устройство может "откликнуться" только как мышь с ненажатыми кнопками. Иначе проверку не пройдет. Если же прошло, ничем страшным нам это не грозит, кнопки то не нажаты.


А вот ещё вариант без автоопределения: попросить пользователя нажать, например, кнопку ОК в центре экрана. Если в течение 5 сек он её нажмёт - мыша есть.

Тема называется "autodetect mouse" :wink: