Pull to refresh

Омышение компьютера или 2 и более указателей мыши на экране

Reading time 6 min
Views 165K
 Если вам предлагают платное
 решение информационной задачи,
 пробуйте найти бесплатное.


В ОС по умолчанию задана работа с 1 указателем мыши. Даже если подключите 2 и более устройств (тачпады, мыши, трекболы), все они в лучшем случае будут двигать один указатель. С этим все свыклись, как с аксиомой, и даже на ресурсах типа ответы.mail.ru есть авторитетные ответы, утверждённые модератором как закрытые, что сделать 2 указателя нельзя (кто имеет туда доступ — поправьте недоразумение).

    

Когда-то было известно коммерческое решение «2 рабочих места за 1 системным блоком» (EasyCLone) — возможность создать на компьютере рабочие столы на 2-4 разных комплектах «дисплей-мышь-клавиатура», и это было даже выгоднее, чем покупать 2 ПК для фирм, но стремительное удешевление комплектующих, видимо, быстро обесценивало такое решение и о нём забыли.

Но недавний топик на малоизвестном ответвлении Хабра неожиданно для многих пролил свет на эту зыбкую истину. Оказалось, что есть программа, которая на уровне драйверов ловит каждую новую подключенную мышь и создаёт для неё новый указатель. Увы, у неё триальный период 15 дней, что тут же испарило желание её включить. Зачем, если стоит задача попробовать неотработанную, неизвестную, но интересную технологию? Есть поиск, интернет и общественная потребность у задачи, а значит, есть возможность найти более гибкие решения.


В данном решении речь не идёт о 2 фокусах ввода в системе. Если мышью переключаются на другое окно или место в окне, то фокус передаётся этой мыши, и курсор ввода с клавиатуры перемещается на это место тоже. Если бы в ОС создавались 2 фокуса ввода, то эта задача называлась бы «2 мыши + 2 клавиатуры», и решение было бы ещё удобнее. Но с точки зрения системы она заметно сложнее — ведь надо иметь не только драйвер мыши, но и множественные активные окна на рабочем столе.

2 указателя мыши могли бы пригодиться для совместной почти одновременной работы на 1 рабочем столе (Desktop). Например, программа по ссылке выше, Peanut Butter Pointer, позиционируется для работы взрослого и ребёнка (совместная работа в обучающих программах).

Поиск показал, что, действительно, верен очередной афоризм, вынесенный в эпиграф. Есть бесплатная программа для Windows (апрель 2004, 2K/XP) с открытым кодом и есть инструкции для Linux, Debian, X.Org 7.5, 19.01.2010 по подключению нужного количества мышей + указателей к ним.

(Замечание для Linux, цитата: «В настоящее время MPX не поддерживается в Gtk+ и соответственно не получится рисовать одновременно двумя мышами в GIMP или Inkscape, но можно одной мышью выбирать инструменты или элементы меню, а другой рисовать. Ситуация изменится с выходом Gtk+ 3. Также перетаскивание одновременно двух окон еще не работает в оконном менеджере Metacity, но иконки перетаскивать одновременно в Nautilus с перемещением окна в Metacity уже можно. Qt поддерживает мультитач начиная с версии 4.6.»)

Остановимся подробнее на решении для Windows XP.

Это «голый» драйвер без инсталлятора. Чтобы его подключить, нужно сделать некоторые действия по инструкции. (На английском — cpnmouse.sourceforge.net/install.html .) Поэтому инструкция ниже — для исследователей, а не для простых потребителей конечного продукта. Две мыши стоит установить хотя бы для того, чтобы посмотреть, как это работает и прикоснуться к «нижним горизонтам» управления устройствами на уровне инсталляции драйверов. Ну а пересказ с переводом и некоторыми иллюстрациями подтвердит уверенность, что цель близка и достижима, нужно лишь «знать, как».

Инсталляция драйверов для 2 и более мышей.


1. Все устройства типа мыши должны быть подключены и работать (двигать указатель).
2. Из-под администратора кладём имеющиеся 2 файла *.inf и *.sys в папки \windows\inf и \windows\system32.
3. Выбираем "Панель управления -> Система -> Оборудование -> Диспетчер устройств".
4. Далее «Mice and other pointing devices», в этой папке видим работающие мышиные устройства.

Драйвер не накладывает ограничений на тип мышей (COM, PS/2, USB). Но он потребует прописывания некоторых данных из свойств устройства в файл cpnmouse.inf.

5. При подключении второй мыши к USB она определяется как «HID-compilant mouse». Для дальнейшей инсталляции с большой вероятностью будет необходимо знание Кода оборудования. Автор драйверов рекомендует получить их с помощью некоторой излишне мощной программы по чтению данных с оборудования, но всё необходимое видно в свойствах мыши. Смотрим:

Свойства HID-compilant mouse -> Сведения -> Коды (ID) оборудования -> Строчка (обычно 2-я) вида HID\Vid_XXXX&Pid_XXXX.

Например, в случае мыши MediaTech MT1068T «Crabby» она была HID\Vid_15d9&Pid_0a4c.

Если этого кода нет в файле cpnmouse.inf в строчках вида (в секции [CPNGroup.Mfg])

  %CPNGroup.DeviceDesc1% = usbinst, HID\Vid_XXXX&Pid_XXXX ,

её необходимо внести в конец списка таких строчек. Для второй мыши A4Tech на порте PS/2 подобное свойство выглядело так:

  ACPI\PNP0F13
  *PNP0F13


По аналогии, в cpnmouse.inf есть строчка

  %CPNGroup.DeviceDesc0% = ps2inst, *PNP0FAKE

К ней тоже должна быть добавлена подобная запись сразу после неё:

  %CPNGroup.DeviceDesc0% = ps2inst, *PNP0F13

Действительно, если её не внести, требуемый драйвер с названием «CPN Tools mouse filter driver PS/2» в дальнейшем отсутствует.

6. После добавлений информации делаем в Диспетчере устройств: HID-compilant mouse -> «правый клик мыши» -> Обновить драйвер... -> Установка из указанного места -> Далее -> (Убрать поиск на сменных носителях ) + Не выполнять поиск. Я сам выберу нужный драйвер -> Установить с диска -> с:\windows\inf (или другой путь %system_root%) -> CPN Tools mouse filter driver USB -> Далее.

Возникнет диалог «Вставьте такой-то диск в устройство ввода дисков» -> OK -> Обзор -> c:\windows\system32\cpnmouse.sys -> Открыть -> ОК (будет табличка «Мастер завершил установку программ для: CPN Tools mouse filter driver USB) -> Готово.

В Диспетчере устройств вместо HID-compilant mouse появится CPN Tools mouse filter driver USB.

7. Повторим те же действия для мыши PS/2 с той разницей, что выбирать будем „CPN Tools mouse filter driver PS/2“. Появится приглашение на перезагрузку. Если от неё отказаться, увидим, что мышь PS/2 тоже сменилась на „CPN Tools mouse filter driver PS/2“. Подготовим компьютер к перезагрузке и выполним её.

Всё бы хорошо, но указатель мыши не раздваивается…

Использование 2 мышей.


Драйвер — это только полдела. Теперь нужна программа, реализующая появление 2 (и более) курсоров. Или использование события мышей в прикладной программе на уровне API (имеется архив, описание и исходные коды) в других прикладных программах. Второй путь обречён на кустарничество — работу с 1-2-3 программами, а общие приложения могут вызвать интерес. Общее приложение, предлагаемое автором, существует одно — программа ordinary-binary-0.1.0.zip и как дополнение, cpnmouse.lib. Она создаёт 2 рисованых указателя для 2 мышей и перекидывает единственный реальный указатель к движущейся мыши, если ordinary.exe и cpnmouse.lib выложены в одной папке. Так получаем вид рабочего стола, вынесенный в заголовок:
    

Если в папку не положить cpnmouse.lib — будем работать только с перескакивающим от мыши к мыши указателем (без стрелочек-рисунков). Это оказывается даже удобнее, потому что отображение рисуночных курсоров имеет недостаток — артефакты при перетаскивании объектов и при выделении текста, впрочем, не влияющие на функциональность прикладных программ. Такие следы, например, оставило небольшое „потаскивание“ окна программы за его заголовок.
    

Есть пара других не менее серьёзных недостатков. Незнание программой более 1 экрана (!), что ставит крест на идее „по-лёгкому“ поработать с 2 или более мониторами. Имеет место такое „чудо“, как потеря способности прокручивать текст колесом мыши. (Как ни странно, средняя и правая кнопки работают.) Дополнительные кнопки нестандартных мышей, конечно, не будут работать (драйверы не родные). Впрочем, коды всех программ и драйверов открытые (VC++ 6), ничто не мешает их доработать. Лицензии в архивах найти не удалось, но в сети где-то проскальзывала ссылка на лицензирование этих разработок от имени университета.

Что с такими драйверами можно ожидать в играх, графических редакторах? Слишком многого ожидать не следует, особенно, игры с 2 игроками. 2 мыши — это, фактически, 1 мышь, но способная мгновенно перемещаться от одной траектории к другой, выполнять поочерёдно клики в 2 далёких друг от друга участках, не носясь манипулятором по столу. Поэтому игра 2 людей с 2 мышами всегда будет (если не написаны специальные драйверы, а они не написаны) от лица одного игрока, но с мгновенным перехватом действий друг у друга.

Пока что неизвестно, насколько лучше платная программа Peanut Butter Pointer, чем эта разработка. Перспектива регулярно её инсталлировать и без следов деинсталлировать через 2 недели специальным деинсталлятором сильно снижает желание её исследовать и ею пользоваться. Может быть, читатели, имеющие опыт работы с ней, расскажут и покажут её достижения подробнее.

UPD 2020-05-16
Добавил ниже в комментарии эти 2 файла (cpnmouse.sys, cpnmouse.inf) непосредственным текстом, поскольку архив перестал скачиваться из источника, о чём сообщил в Лс читатель Amoklauf (спасибо за замечание).

Будет интересно узнать, сможет ли эта разработка запуститься в Windows 10?
Tags:
Hubs:
+10
Comments 11
Comments Comments 11

Articles