Проекты
GameDev.ru / Проекты / Форум / Жестурь / Gestureo (жесты мышек - в очередь клавиш) [MS-VC 6]

Жестурь / Gestureo (жесты мышек - в очередь клавиш) [MS-VC 6]

Поделиться
AlikberovПостоялецwww27 июля 20170:51#0
+ Предыстория

Что это такое?

Если к системе Windows подключено более одной мышки, то они будут просто дублировать друг друга и никаких существенных преимуществ с этого не извлечёшь.
Жестурь - относительно простая утилита, поддерживающая до 9 мышек.
Каждая мышка получает свой собственный набор параметров, отображаемых в отдельной закладке программы.
В параметрах можно выбрать скорость перемещения указателя, разрешить или подавить стандартное действие любых кнопок мышки. А также, имеется возможность выбрать конкретной мышке собственный указатель, который перемещается по экрану независимо от всех остальных.

Режимы работы утилиты

После запуска программы в трее появляется значок. Значок имеет четыре вида и сигнализирует о текущем режиме программы.
Левый клик по значку программы в трее скрывает/отображает окно программы.
Правым кликом вызывается контекстное меню, из которого можно выбрать один из четырёх режимов работы программы.
Режим «Default» стандартный. Режим «Extended» - расширенный. Режим «Freeze» служит безопасным. Режим «Game» - режим «игры».
Переключение режимов доступно также посредством нажатий «горячих клавиш» на клавиатуре. Кобинация соответствует «Ctrl»+«Shift»+«D|E|F|G» клавишам первой букве названия режима.

Таблица шаблонов закладки «Pattern»

В таблице шаблонов описываются постулаты к виртуальному нажатию определённой клавиши клавиатуры.
Таблица содержит 32 строки по 25 столбцов каждая. Тем самым, имеется возможность назначения до 32 различных клавиш, которые виртуально будут нажиматься в тех случаях, когда постулаты строки справедливы на текущий момент времени.
Первый столбец хранит название клавиши. Кликнув по нему, он очищается с предложением нажать любую клавишу. Нажатие нужной пользователю клавиши заносится её идентификатором в строчку, после чего со строки снимается выделение и фокус, чтобы избежать ложных срабатываний.
Последующие 13 столбцов идентифицируются буквами статусов мышек и озаглавленны с их соответствием:
  • Так, столбцы «L»/«M»/«R» закреплены за «Левой»/«Средней»/«Правой» кнопками соответственно
  • За столбцами «S»/«N»/«E»/«W» закреплены движения мыши на «Юг»/«Север»/«Восток»/«Запад» соответственно
  • Столбцы «H»/«X» закреплены за вращением горизонтального колёсика мышки (когда он имеется), а «V»/«Y» - за колёсиком вертикальной прокрутки мышки
  • За дополнительными боковыми кнопками мышки закреплены столбцы «B» и «F» по соответствию «Back» и «Forward» интернет навигации браузера.

Далее следуют три столбца «Ext»/«Free»/«Game», определяющие набор тех режимов, при которых данная строка постулатов будет справедлива. Если не отмечен ни один из режимов, событие будет срабатывать всегда, если состояние мышки справедливо для него.
Последние девять столбцов с номерными индексами отмечают индексы тех мышек, состояния которых должно учитываться для заданной строки.

Индивидуальная настройка конкретной мышки

На закладке опредённой мышки отображается несколько групп настроек, среди которых «Status», «Properties» и «Pointer».
Группа «Active status» служит для оперативного отображения статуса одной из мышек на данный момент времени. Все манипуляции с этой мышкой, её перемещения, нажатия на кнопки и прокрутки колёсиков незамедлительно отображаются в её статусе. Причём, на всех кнопках статуса первая буква закреплена за определённым столбцом под той же буквой в таблице постулатов закладки «Pattern».
Группа закладок «Default|Extended|Freezing|Gaming» управляет поведением мышки в конкретном режиме. Кликая по соответствующим кнопкам-флажкам левой или правой кнопкой, можно нажать или отжать кнопку любого флажка:
  • «Left/Middle/Right» - флажки определяют, будут ли соответствующие кнопки работать в приложениях в том или ином режиме у выбранной мышки
  • «Side buttons» разрешает работу боковых дополнительных кнопок
  • «Wheel»/«Horizontal wheel» - управляют действием роликов мышки в приложениях
  • «Moving» - флаг, определяющий, будет ли выбранная мышка в конкретном режиме перемещать системный указатель вообще
  • Числовой параметр справа от кнопки «Moving» задаёт скорость перемещения указателя выбранной мышки в конкретном режиме. Скорость закрепляется кликом по кнопке «Moving» рядом

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

Анимированные указатели и набор «эмоций»

Указателями могут служить иконки (*.ico) и анимированные курсоры (*.ani), коллекционируемые директорией /cursors/.
Поддерживаются произвольные размеры указателей до 256x256 пикселей.
Каждый анимированный курсор может содержать в себе ещё несколько дополнительных рядов анимации, условно названных «эмоциями». В ani-файле «эмоциональные сценки» составляют один непрерывный ряд анимации, но каждая следующая «эмоция» отделяется и начинается пустым кадром. Что предоставляет возможность выбрать в качестве указателя какого-нибудь «персонажа», а потом просто переключаться по его «эмоциям».
В группе «Pointer» можно видеть предварительную анимацию, а также установить размер загружаемого из меню курсора. Правым кликом вызывается контекстное меню со всей доступной коллекцией курсоров.
Когда курсор загружен и имеет при этом набор «эмоций», спиннером можно выбрать номер нужной «эмоции», которая сменится по окончанию анимации текущей.

Правка: 16 авг. 2017 8:09

endeavour_prПостоялецwww27 июля 201712:39#1
Я правильно понимаю, что под эмуляцией вы подразумеваете отправку месседжей окнам через SendMessage ?
Разве autoit и подобный софт не умеет делать подобные вещи ?
P.S.Сразу не понял о каких эмуляторах идет речь.

Правка: 27 июля 2017 12:57

AlikberovПостоялецwww28 июля 201720:48#2
endeavour_pr
Я правильно понимаю, что под эмуляцией вы подразумеваете отправку месседжей окнам через SendMessage ?
Вернo. Только не окнам, а активному окну.
endeavour_pr
Разве autoit и подобный софт не умеет делать подобные вещи ?
Что-то слышал об этой утилите. Видимо в гугле опять вопросы формулировал неверно.
Суть задачи в том, что если в системе подключены три мышки, необходимо чтобы перемещала указатель и кликала только одна физическая мышь. Другие две физические мышки никак не должны влиять на указатель и клики.
Например, если я основную мышку спрячу себе в карман и клавиатуру программно заглушу, то две другие мышки должны просто своими кнопками управлять общей громкостью. Это очень полезно, когда в гости приходят карапузы и смотрят мультфильмы. В этом случае они у меня могут лишь сделать громче/тише звук или поставить на паузу. У каждого - по мышке, каждый - доволен. Но оба ничего существенного/пагубного сделать ими не могут…
Другой пример - запускаю ModPlug Tracker и создаю один инструмент на несколько разных ударных, закреплённых за разными нотами / клавишами клавиатуры. Программирую свою утилиту, назначая двум мышкам 12 разных клавиш и, соответственно, инструментов. Кладу мышки на диван и бью по его мягкой поверхности руками. Мышки подпрыгивают, каждая смещается в свою сторону и, соответственно, симулируется нажатия разных клавиш. Проигрываются звуки определённых барабанов. Малыши довольны, я - спокоен и свободен. Сам с кухни могу сбавить звук, тупо кликая по мышке прямо в кармане.
Вот как верно вгуглить, чтобы для AutoIt найти соответствующий пример сценария?
endeavour_pr
P.S.Сразу не понял о каких эмуляторах идет речь.
Да, под Sega/Dendy эмуляторы затачивал идею в первую очередь и лично прошёл пару уровней Tiny Toons и BoogerMan, а также в BomberMan-турнирах с племянницей участвовали.
Проводные джойстики малышам доверять опасно, а беспроводные - дорого стоят. За то, если руки не кривые и можно аккуратно к кнопкам мышек припаять проводки, подключив к ним педали от электрической швейной машинки, то можно дёшего да сердито за рулём посидеть, топча педали газа/тормоза и не переживая за педали/руль, поворачивая маховое колесо стариной швейной машинки. Обычно соответствующие манипуляторы дорого стоят и потом трястись придётся, чтобы не переусердствовала малышня.

P.S.: Есть ли готовые фирменные утилиты для подобных решений?

std::cinУчастникwww29 июля 20171:41#3
Alikberov где её скачать? На гитхабе только исходники под Visual Studio 6, релизов нету.
romgermanПостоялецwww29 июля 20172:24#4
Alikberov
> если в системе подключены три мышки
Зачем?
AlikberovПостоялецwww29 июля 20173:33#5
romgerman
Зачем?
Когдa слышу подобные вопросы, сразу появляется мысль, что единственный компьютер этого пользователя - планшет или смартфон.
Вообще-то, на данный момент у меня к системе подключено 4 клавиатуры, 4 мыши и 3 монитора. Конечно, это - малое достижение, в сравнении с более богатыми пользователями…
(У меня один старенький CRT почти сутками работает под DVR. Второй Flatron включается для отладки/логов или игр малышни под другим vmWare под Windows'8 с эмуляторами Sony-PSX, Sega, SimCity/Sims. А новый IPS - для всего остального)
std::cin
где её скачать? На гитхабе только исходники под Visual Studio 6, релизов нету.
Хoтя программирую я строго внутри vmWare под Windows'XP на Visual Studio 6, чтобы всякое паразитство туда не проникло из-вне (из-за чего топчусь всё в 32 битах, а не 64 на более «продвинутых» студиях), не рискую распространять бинарники, чтобы запятнать свою репутацию.
Однако, если желаете, я сейчас проверю свой бинарник в VirusTotal и выложу (на ваш страх и риск): Жестурь

P.S.: Вы просто хотите увидеть код в действии или имеется несколько мышек?
Просто уже вторые сутки я активно дорабатываю код, из-за чего нуль-пост нужно несколько подправить.
Добавлено пара фишек… Следите за нуль-постом…
P.P.S.: Спасибо за внимание и бета-тестирование!

+ Скриншот с пояснениями

Правка: 29 июля 2017 4:51

std::cinУчастникwww29 июля 20173:52#6
Alikberov я могу с помощью этой проги назначить на боковые кнопки мышки регулировку громкости в винде?
std::cinУчастникwww29 июля 20173:59#7
Alikberov
> Проводные джойстики малышам доверять опасно, а беспроводные - дорого стоят. За
> то, если руки не кривые и можно аккуратно к кнопкам мышек припаять проводки,
> подключив к ним педали от электрической швейной машинки, то можно дёшего да
> сердито за рулём посидеть, топча педали газа/тормоза и не переживая за
> педали/руль, поворачивая маховое колесо стариной швейной машинки. Обычно
> соответствующие манипуляторы дорого стоят и потом трястись придётся, чтобы не
> переусердствовала малышня.
Звучит забавно. Что там за монстры которые могут сломать геймпад?

Правка: 29 июля 2017 4:00

AlikberovПостоялецwww29 июля 20175:00#8
std::cin
Alikberov я могу с помощью этой проги назначить на боковые кнопки мышки регулировку громкости в винде?
Кaк раз и для этой цели в частности я разрабатывал утилиту.
Выше я писал:
(Надо сказать, мы с братом терпеть не можем подобные опциональные кнопки у мышей: Чуть неловко тронешь - бац и страница переключилась)

Как настроить:
После запуска программы, кликните по индексной кнопке мышки с боковыми кнопками правым кликом, включив режим «M» - игнор колёсика и средней кнопки.
Жестурь | Жестурь / Gestureo (жесты мышек - в очередь клавиш) [MS-VC 6]
Теперь в строчках с «VOLUME_UP» и «VOLUME_DOWN» снимите все флажки. Поставьте лишь флажки «A1» и «B1» соответственно.
После чего уберите фокус с этой программы и погасите «NumLock»: Боковые кнопки должны начать управлять громкостью…
std::cinУчастникwww29 июля 20175:36#9
В Windows 10 прога замораживает курсор мышки (например при перетаскивании окна Gestureo) и вносит некоторые лаги в поведение мыши - все щелчки начинают происходить через полсекунды.

Настроил как ты описал:

Изображение

Не работает.

Пришлось качать Mouse Manager. https://realityripple.com/Software/Applications/Mouse-Manager/
Изображение

Очень удобно. Прячется в трей.

Правка: 29 июля 2017 5:40

AlikberovПостоялецwww29 июля 20176:08#10
std::cin
Настроил как ты описал:
A собачек "@" снять забыл? (Они же для "режима игры" - жёсткого блокирования перемещений мышек карапузиками)
В Windows 10 прога замораживает курсор мышки (например при перетаскивании окна Gestureo) и вносит некоторые лаги в поведение мыши - все щелчки начинают происходить через полсекунды.
Вот перетаскивать окошко - нельзя! Сам пытаюсь устранить баг. Ещё нельзя кликать на кнопки управления окном (свернуть/развернуть/закрыть).
Видимо низкоуровневый перехват мышей что-то нехорошее посыляет...
(Только что исправил, удалив тупой столетний перехватчик мышки)
Для вас - эксклюзивно настроенная программа: Gestureo (новейщее) - только боковые кнопки - Лишь погасить «NumLock».
Очень удобно. Прячется в трей.
Писал подобные трейные программы, когда учился кодить под Win'98. Сейчас - влом. :)

P.S.: На счёт "Mouse Manager" - здесь сравнение неуместно.
Та утилита лишь назначает боковым кнопкам что-то.
Тогда как свою я разрабатывал именно до покупки «нормального джойстика».
А утилиту использую вместо ПДУ. Позже выложу видео с демонстрацией приколов.

Правка: 29 июля 2017 6:36

std::cinУчастникwww29 июля 20176:37#11
Alikberov случайно зашел в качалку и увидел там файл. Тег разместите на новой строке. Так его сайт не переваривает.

Заработало. Правда я так и не понял как сделать чтобы строки таблицы имели заголовок Space и что это значит тоже не ясно.
Изображение

Еще одна особенность, при запуске проги, в винде отключается повышенная точность указателя мыши. Видимо весь ввод перехватывается твоей прогой.
Сделай еще чтобы программа не висела перед глазами, а пряталась в трей. И убери требование отключать Num Lock, Лучше сделай галочку какую нить в окне.

Правка: 29 июля 2017 6:38

AlikberovПостоялецwww2 авг. 201723:45#12
std::cin
Заработало. Правда я так и не понял как сделать чтобы строки таблицы имели заголовок Space и что это значит тоже не ясно.
Виднo следует написать достаточно строгую документацию.
Здесь Space - клавиша пробела, которая никогда не будет нажата, так как флаги V+Y - взаимоисключающие.
Достаточно выбрать любую нужную строчку таблицы и нажать любую клавишу - она закрепится.
Еще одна особенность, при запуске проги, в винде отключается повышенная точность указателя мыши. Видимо весь ввод перехватывается твоей прогой.
Я тоже это заметил. Думаю, в последующем я доработаю так, чтобы каждая мышка настраивалась на индивидуальную точность, что может быть полезным в ряде случаев.
И убери требование отключать Num Lock, Лучше сделай галочку какую нить в окне.
Сразу видно, что ваш компьютер - именно персональный в личном углу.
У меня он - в центре квартиры и каждый к нему имеет доступ: От кошек до карапузов. Иногда, когда «чудо» подбегает к столу в тот момент, когда отлаживаю код, главное - успеть нажать одну единственную клавишу. Клавиатура с мышью блокируется до нажатия сочетания трёх «волшебных» клавиш. (Это проще, чем мышью в попыхах искать ту галочку)
Каждый раз прятать клавиатуру в шкаф - не дело. Муж сестры вообще из её компьютера физически выдёргивал мышь и клавиатуру, пока вся система в конце-концов однажды не полетела.
У меня - три монитора. И «волшебными» Ctrl+Shift+«0…9», которые никому не говорю, я локализую мышь на конкретном мониторе. С чем и блокируется Volum-Up/Down, Win, Esc, F4, Del и другие критические клавиши. На клавиатурах хоть котят пусть жёстко «планируют» - системе пофиг!
Но, предложение учту: Будет возможность указать свою «магическую» клавишу…Или клик в трее.
Сделай еще чтобы программа не висела перед глазами, а пряталась в трей.
Да, кажется, понимаю.
У меня - три монитора, потому особой проблемы с «мозолями глаз» нету. На досуге займусь треем и галочками…
Пока есть более актуальные баги. В частности - проблема точности наведения указателя. Здесь потребуется могущество гугла. И добавления трек-контроллов наверное…

P.S.: На самом деле этот проект у меня «умирающий», потому исходники выложил в открытый доступ.
Написано всё до безобразия ужасно. С трудом сам нахожу что к чему. И уже создал новый проект, куда буду переносить лишь удачные и отлаженные фрагменты.
Во-первых, напрягает ограничение в 16 строк таблицы и 26 галочек на две мыши. Как уже сказал, у меня - 5 мышек, которые давно хочу распределить индивидуально по «обязаностям».
Во-вторых, громоздкость самой таблицы. Что так же наложила ограничение на 27 флажков. Нужно таблицу чем-то заменить. То ли простым макро-текстом типа «VK_VOLUME_UP=A1», то ли более продвинутым графическим интерфейсом.
(Был вариант с пунктами меню, который форсировал меня переходить именно к таблице)
В-третьих, хочу ввести настраиваемую скорость нажатия определённых клавиш. Так, чтобы в Sega/Top-Gear колёсик мыши работал как руль. И чем «круче» его поворачиваешь, тем чаще выдаётся серия нажатий курсорных клавиш.
P.P.S.: В целом же - Спасибо!
Выявились многие проблемы, к которым я относился без должного внимания…
(Карапузы усложняют быт программиста и как-то не замечаешь хитроумные заморочки, которыми наделяешь код: Работает - и ладно. Защищает - ещё лучше!
Вот Ctrl+Alt+Del никак одолеть не могу. Думаю, от перехвата пяти мышек нужно расширяться до перехвата четырёх клавиатур)
P.P.P.S.: Жестурь - не с проста: Настройки и заморочки этой утилиты, не говоря про отладку - ещё какая «жесть»!
(Под vmWare периодически требуется подключать/отключать отдельные мышки в хосте и терпеть периодическое подвисание всей системы)

P.P.P.P.S.: Добавил иконку и меню в трей. Теперь окно умеет исчезать. Однако, клик в трее ведёт себя по разному в Windows'XP и в Windows'8, что раздражает и требует детального вникания в суть феномена проблемы…
Добавил таб закладок. Теперь за каждой активной мышью закрепляется отдельная закладка настроек. Всего мышек может быть подключено до девяти штук, что является временным ограничением на данный момент…
(В настройках конкретной мышки можно будет отключить/включить/выбрать её указатель, разрешить/запретить нужным кнопкам генерировать стандартные события, указать скорость перемещения, и т.д.)
Также у каждой мышки теперь имеется собственный указатель с персональным индексом, который перемещается только в пределах основного экрана…
Снял скриншот:
Жестурь/Gestureo - доработки | Жестурь / Gestureo (жесты мышек - в очередь клавиш) [MS-VC 6]
К сожалению, проверить утилиту под все девять мышек не имею возможности. Так как самые рабочие - только 3 + основная.

Всегда задавался вопросом: Качаешь бесплатную какую-нибудь отстойную утилитку, а у разработчика ещё кнопка «Donate» красуется. Думаешь, как $39 могут повлиять на качество кода?
Теперь понял: Будь у меня достаточно финансов, приобрёл бы все девять беспроводных мышек с кучей дополнительных кнопок и проверил бы собственную утилиту более основательнее…
Если каждую из мышек оригинально приспособить (две - под ступни, одна - за спиной), то во многих играх-бродилках можно спокойно обойтись без стандартного клавишного набора…
Имеется мысль припилить к утилите Squirrel-скрипты, чтобы можно было программировать микро-игры с турнирами на нескольких мышках. Но, это в отдалённой перспективе. А пока - пытаюсь устранить мелкие глюки…

2016.08.10 Сегодня программа работала с самого утра. Если верить диспетчеру задач, система за 12 часов уделила ей около 50 минут машинного времени и 1024кб памяти…
На данный момент релиз вполне рабочий, но сыроват. Не смотря на то, что поддерживается до 100 анимированных указателей на выбор под каждую мышь в масштабе от 100% до 400%, утечек памяти не наблюдается.

+ Анимашки на столе

Под Windows'8 поддерживаются ani-файлы указателей произвольного размера, просто сконвертированных из gif в ani. Не используется никаких дополнительних библиотек или даже GDI+. Всё дёшего и сердито. Потому под Windows'XP с нестандартными указателями наблюдается тихая ошибка с отсутствием всех указателей, если хотя бы один неправильного размера.
Самое любопытное то, что 15 лет назад коллекционировал шуточные программы, где анимашки бегали по рабочему столу. А теперь - сам этого и достиг, только в несколько ином контексте.
(Правда, напрягает, что RawInput работает не через callback-вызовы, а сообщениями WM_INPUT. Что сказывается на общей производительности местами: Окна перемещаются мышкой с иннерциями и подвисаниями, например.)

Правка: 10 авг. 2017 22:17

/ Форум / Проекты / Утилиты

2001—2017 © GameDev.ru — Разработка игр