Вверх ↑
Этот топик читают: Гость
Ответов: 542
Рейтинг: 12
#1: 2010-11-30 18:16:38 ЛС | профиль | цитата
Можно ли компонентами HiAsm реализовать программу обрабатывающую нажатия кнопок одновременно подключенных нескольких USB PC мышек?
карма: 0

0
Ответов: 893
Рейтинг: 18
#2: 2010-11-30 18:23:53 ЛС | профиль | цитата
Меня тоже интересовал такой вопрос , хотел сделать игру с возможностью раздельного управления мышками различных персонажей.
Пришол к выводу что можно если написать свои драйвера.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 542
Рейтинг: 12
#3: 2010-11-30 18:41:46 ЛС | профиль | цитата
А мне нужно используя один PC написать программу для школьного брэйнринга, двум командам в качестве пульта думал дать мышки с USB удлинителями. Вот так всегда... учитивая школьный буюджет приходится, что то придумывать правда не всегда удается реализовать.
Но в моем случае задачка по проще, потому что мне достаточно перехвативать нажатие любой кнопки и в программе сравнивать кто первый кликнул мышкой.
карма: 0

0
Ответов: 4664
Рейтинг: 767
#4: 2010-11-30 18:44:34 ЛС | профиль | цитата
Забацай им самодельный девайс: две кнопки, подключенные через LPT или COM и программку, обрабатывающую их.
карма: 26

0
Ответов: 542
Рейтинг: 12
#5: 2010-11-30 18:49:57 ЛС | профиль | цитата
100 лет ничего не паял.
карма: 0

0
Ответов: 397
Рейтинг: 34
#6: 2010-11-30 19:13:35 ЛС | профиль | цитата
[flood]afandi, хорошо сохранился [/flood]
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#7: 2010-11-30 19:18:42 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2021-05-21 12:58:11
карма: 0

0
Ответов: 542
Рейтинг: 12
#8: 2010-11-30 21:24:42 ЛС | профиль | цитата
Для хотя бы одной USB мышки есть пример перехвата нажатии?
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2010-11-30 22:46:04 ЛС | профиль | цитата
есть в инете драйвера, без установки которых под Windows распознать две мышки не возможно. Эти драйвера предоставляют свое API, через которое их и можно различить.
карма: 27
0
Ответов: 5446
Рейтинг: 323
#10: 2010-11-30 23:07:28 ЛС | профиль | цитата
afandi, у одной мышки выламываешь левую кнопку, у другой - правую. Ну или не выламываешь, а как-то блокируешь. Плюс заклеиваешь "глазок" (чтобы укачатель не уехал с кнопки). А дальше всё просто:
code_21645.txt

Кнопка "S" на клавиатуре включает кнопку и выключает обе "лампочки". Для красного игрового стола используется левая кнопка, для зелёного - правая. После нажатия любой кнопки мыши дальнейшие нажатия блокируются.
карма: 1

1
файлы: 1code_21645.txt [1.3KB] [322]
Голосовали:afandi
Ответов: 542
Рейтинг: 12
#11: 2010-12-01 00:12:02 ЛС | профиль | цитата
Да вы просто гений, спасибо. Только вот программка только на коды клави реагирует.
карма: 0

0
Ответов: 5446
Рейтинг: 323
#12: 2010-12-01 00:43:08 ЛС | профиль | цитата
afandi писал(а):
Только вот программка только на коды клави реагирует.

Не понял.

карма: 1

0
Ответов: 542
Рейтинг: 12
#13: 2010-12-01 01:30:48 ЛС | профиль | цитата
Ваша версия у меня не работала и я ее доработал, правда как то топорно я не уразумел как отключать перехват нажатии кнопки мишки после первого перехвата.
Осталось часики добавить. Кстати проверено при двух USB мышках работает нормально.
code_21646.txt
карма: 0

0
файлы: 1code_21646.txt [1.9KB] [195]
Ответов: 5446
Рейтинг: 323
#14: 2010-12-01 03:20:33 ЛС | профиль | цитата
afandi, напоминаю: сначала надо нажать на клавиатуре букву "S", а потом уже левую/правую кнопки мыши на большой кнопке, подписанной "Кнопка".
------------ Дoбавленo в 03.20:
Доработал схему:
Add(MainForm,2953706,21,105)
{
Width=575
Height=449
Caption="Брейн-Ринг"
BorderStyle=1
Position=1
Point(onKeyDown)
Point(onMouseUp)
link(onKeyDown,15081050:doCase,[(65,132)(65,111)])
link(onMouseUp,7095299:doCompare,[(85,139)(85,258)])
}
Add(LED,6647594,595,98)
{
Width=200
Height=200
}
Add(LED,16049984,644,70)
{
Left=370
Width=200
Height=200
ColorOn=65280
ColorOff=32768
}
Add(IndexToChanel,12500246,546,245)
{
link(onEvent1,6647594:doOn,[(586,251)(586,118)])
link(onEvent2,16049984:doOn,[(611,258)(611,90)])
}
Add(Case,15081050,77,105)
{
Value=Integer(83)
DataOnTrue=Integer(1)
link(onNextCase,2265140:doCase,[(128,111)(128,27)])
link(onTrue,14886037:doEvent1,[(131,118)(131,125)])
}
Add(If_else,7095299,126,252)
{
Op2=Integer(1)
link(onTrue,12854502:doCompare,[])
link(Op1,13893015:Value,[(132,219)(230,219)])
}
Add(Memory,13893015,224,161)
{
@Hint=#73:Статус игры: 0 - вопрос не задан, 1 - ожидается ответ, 2 - нажата кнопка |
Default=Integer(0)
link(onData,15978247:doEvent,[])
}
Add(Hub,16403156,238,245)
{
InCount=2
OutCount=4
PColor(onEvent1,16755285)
PColor(onEvent4,5635840)
link(onEvent1,12918985:doStop,[(284,251)(284,146)])
link(onEvent2,1506451:doData,[(291,258)(291,244)])
link(onEvent3,12500246:doEvent,[(350,265)(350,251)])
link(onEvent4,3651149:doValue,[(270,272)(270,97)])
}
Add(Timer,12918985,413,133)
{
Enable=1
link(onTimer,1064757:doNext,[])
}
Add(LedNumber,13081735,815,301)
{
Left=200
Top=135
Width=170
Height=65
Text="-00-"
Point(doText)
}
Add(Case,2265140,147,21)
{
Value=Integer(82)
DataOnTrue=Integer(1)
link(onTrue,8401726:doEvent1,[])
}
Add(Hub,8401726,217,28)
{
InCount=2
OutCount=4
PColor(onEvent2,16755200)
PColor(onEvent3,16711850)
PColor(onEvent4,5614250)
link(onEvent1,16049984:doOff,[(357,34)(357,83)])
link(onEvent2,6647594:doOff,[(337,41)(337,111)])
link(onEvent3,7665150:doWork1,[(256,48)])
link(onEvent4,8546626:doWork1,[(239,55)(239,109)(207,109)])
}
Add(LED,12147302,476,154)
{
Left=235
Width=100
Height=100
ColorOn=65535
ColorOff=32896
}
Add(IndexToChanel,15978247,371,161)
{
Count=3
link(onEvent1,683651:doWork2,[])
link(onEvent2,12147302:doOn,[])
link(onEvent3,683651:doWork3,[(424,181)])
}
Add(DoData,1506451,399,238)
{
Data=Integer(2)
link(onEventData,8546626:doWork3,[(443,244)(443,207)(207,207)])
}
Add(HubEx,683651,420,161)
{
link(onEvent,12147302:doOff,[])
}
Add(Counter,1064757,532,133)
{
Max=21
PColor(onNext,16755200)
link(onNext,10233330:doEvent1,[])
}
Add(Case,8541636,735,133)
{
Value=Integer(20)
DataOnTrue=Integer(2)
PColor(onTrue,11141120)
link(onTrue,16403156:doEvent1,[(783,146)(783,223)(226,223)(226,251)])
}
Add(Hub,10233330,623,133)
{
link(onEvent1,8541636:doCase,[])
link(onEvent2,4639624:doCompare,[(647,146)(647,279)])
}
Add(FormatStr,13214666,742,273)
{
Mask="-0%1-"
link(onFString,11057012:doWork1,[(796,279)])
}
Add(FormatStr,14223814,742,336)
{
Mask="-%1-"
link(onFString,11057012:doWork3,[(796,342)])
}
Add(If_else,4639624,658,273)
{
Type=1
Op2=Integer(10)
link(onTrue,13214666:doString,[])
link(onFalse,14223814:doString,[(712,286)(712,342)])
}
Add(HubEx,11057012,792,301)
{
link(onEvent,13081735:doText,[])
}
Add(HubEx,7665150,252,133)
{
PColor(onEvent,16711850)
link(onEvent,12918985:doTimer,[])
}
Add(HubEx,8546626,203,161)
{
PColor(onEvent,5614250)
link(onEvent,13893015:doValue,[])
}
Add(Hub,14886037,154,119)
{
OutCount=3
link(onEvent1,8401726:doEvent2,[(192,125)(192,41)])
link(onEvent2,3651149:doClear,[(246,132)(246,104)])
link(onEvent3,7665150:doWork2,[])
}
Add(Memory,3651149,287,91)
{
Default=Integer(-1)
}
Add(If_else,12854502,175,252)
{
Type=5
PColor(Op2,170)
link(onTrue,16403156:doEvent2,[])
link(Op2,3651149:Value,[(188,231)(293,231)])
}

Для судьи: S - запуск таймера (на 20 секунд), R - возобновление таймера после неверного ответа одной из команд (при этом её кнопка блокируется до следующего нажатия S). По истечении 20 секунд отсчёт останавливается и блокируются обе кнопки.

Для капитанов: левая кнопка - ответ красного стола, правая - ответ зелёного стола.

Жёлтый индикатор: идёт отсчёт времени.

Если надо, могу добавить определение фальшстарта, а также блокировать кнопки R и S от случайного нажатия в неправильный момент.
карма: 1

1
Голосовали:afandi
Ответов: 542
Рейтинг: 12
#15: 2010-12-01 08:16:34 ЛС | профиль | цитата
iarspider, спасибо. Вы сделали то чего нет у меня в схеме и использование кнопок клавиатуры против визуальных кнопок конечно правильно.
я старался делать по инструкции правил Брейн-ринга. Поэтому наверное правильно будет дать возможность организатору время ожидания ответа выбирать индивидуально.
Правила брейн-ринга: http://windflower.spb.ru/ke/common/reglaments/brainlaws.html
В моей версии были добавлены звуковые сигналы, тихий тик в обратном отсчете 10 сек. а на 5-й и далее сек. более громкий, также сигнал старта, завершения ринга.
Не хватает сигнала фальстарта. Естественно каждый раз перед очередным раундом нужно сбрасывать счетчик.

карма: 0

0
файлы: 1braynring.sha [119.3KB] [272]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)