Несколько мышей на ОС X -- macos поле с участием input поле с участием mouse пол Связанный проблема

Multiple mice on OS X


18
vote

проблема

русский

Я разрабатываю приложение OS X, которое предполагается принимать вход от двух мышей. Я хочу прочитать движение каждой мыши независимо. Что было бы лучшим способом сделать это?

Если это невозможно, есть ли способ отключить / включить любую из мышей программно?

Английский оригинал

I am developing an OS X application that is supposed to take input from two mice. I want to read the motion of each mouse independently. What would be the best way to do this?

If that is not possible, is there a way to disable/enable either of the mice programmatically?

</div
        
 
 

Список ответов

14
 
vote
vote
Лучший ответ
 

Интерфейс устройства класса HID определенно то, что вам нужно. Есть в основном два шага:

Сначала нужно найти мышиные устройства. Для этого вам нужно построить подходящий словарь, а затем поиск в реестре IO с ним. Существует некоторая пример кода здесь вам нужно будет добавить некоторые дополнительные элементы в словарь, поэтому вы просто получите мыши вместо всех устройств HID в системе. Что-то вроде этого должна сделать трюк:

 <код> // Set up a matching dictionary to search the I/O Registry by class // name for all HID class devices` hidMatchDictionary = IOServiceMatching(kIOHIDDeviceKey);  // Add key for device usage page - 0x01 for "Generic Desktop" UInt32 usagePage = 0x01; CFNumberRef usagePageRef = ::CFNumberCreate( kCFAllocatorDefault, kCFNumberLongType, &usagePage ); ::CFDictionarySetValue( hidMatchDictionary, CFSTR( kIOHIDPrimaryUsagePageKey ), usagePageRef ); ::CFRelease( usagePageRef );  // Add key for device usage - 0x02 for "Mouse" UInt32 usage = 0x02; CFNumberRef usageRef = ::CFNumberCreate( kCFAllocatorDefault, kCFNumberLongType, &usage ); ::CFDictionarySetValue( hidMatchDictionary, CFSTR( kIOHIDPrimaryUsageKey ), usageRef ); ::CFRelease( usageRef );   

Затем вам нужно слушать очереди x / y / кнопки из устройства, которые вы найдете выше. Это код выборки должен указывать вам в правильном направлении. Использование обратных вызовов намного эффективнее, чем опрос!

Хид-код выглядит гораздо более сложным, чем это - это сделано довольно «слои».

 

The HID Class Device Interface is definitely what you need. There are basically two steps:

First you need to find the mouse devices. To do this you need to construct a matching dictionary and then search the IO Registry with it. There is some sample code here, you will need to add some additional elements to the dictionary so you just get the mice instead of the all HID devices on the system. Something like this should do the trick:

// Set up a matching dictionary to search the I/O Registry by class // name for all HID class devices` hidMatchDictionary = IOServiceMatching(kIOHIDDeviceKey);  // Add key for device usage page - 0x01 for "Generic Desktop" UInt32 usagePage = 0x01; CFNumberRef usagePageRef = ::CFNumberCreate( kCFAllocatorDefault, kCFNumberLongType, &usagePage ); ::CFDictionarySetValue( hidMatchDictionary, CFSTR( kIOHIDPrimaryUsagePageKey ), usagePageRef ); ::CFRelease( usagePageRef );  // Add key for device usage - 0x02 for "Mouse" UInt32 usage = 0x02; CFNumberRef usageRef = ::CFNumberCreate( kCFAllocatorDefault, kCFNumberLongType, &usage ); ::CFDictionarySetValue( hidMatchDictionary, CFSTR( kIOHIDPrimaryUsageKey ), usageRef ); ::CFRelease( usageRef ); 

You then need to listen to the X/Y/button queues from the devices you found above. This sample code should point you in the right direction. Using the callbacks is much more efficient than polling!

The HID code looks much more complex than it is - it's made rather "wordy" by the CF stuff.

</div
 
 
7
 
vote

Это похоже на HID Manager Вы ищете.

 

It looks like the HID Manager is what you're looking for.

</div
 
 
3
 
vote

Вы собираетесь захотете проверить набор ввода / вывода и HID (устройства для человека) менеджер.

Диспетчер HID является частью Кит ввода / вывода , так что ищут туда, может быть полезен. Есть два API для управления HID, Старая API немного больше, а затем у вас есть новый 10,5 и выше API , который немного удобнее.

Важная вещь, которую нужно понять, это не будет, вероятно, быть просто быстрой исправлением, это может принять некоторую значительную работу, чтобы получить его. Если вы можете предположить, что у вас будет 10,5 или лучше установлено, используя API leopard, определенно поможет.

также; В зависимости от того, как вы выполняете то, что вы делаете, может быть важно, чтобы вы скрывали курсор мыши, так как он все еще может многое переместить, даже если вы получаете информацию с обеих мышей. Если ваше приложение хватает экран, я бы использовал COREGRAPHICS, чтобы отключить курсор и просто нарисовать свои собственные.

Вы также можете рассмотреть возможность поиска обертки для одного из этих API, пример можно найти в этот вопрос .

 

You're going to want to check out the I/O Kit and HID (Human Interface Device) manager stuff.

HID manager is part of I/O Kit, so looking into there might be useful. There are two APIs for HID management, the older API is a bit more painful and then you have the new 10.5 and above API which is a bit more comfortable.

Important thing to understand is this isn't going to probably be just a quick fix, it may take some significant work to get it running. If you can assume you'll have 10.5 or better installed, using the Leopard API will definitely help.

Also; depending on how you accomplish what you're doing, may be important for you to hide the mouse cursor as it may still move a lot even if you're receiving the information from both mice. If your application grabs the screen, I'd use CoreGraphics to disable the cursor and just draw my own.

You might also consider finding a wrapper for one of these APIs, an example can be found in this question.

</div
 
 
1
 
vote

Если вы не можете заставить одну из мышей не иметь дело с мышью, оба будут продолжать контролировать указатель. Тем не менее, вы можете использовать iokit для записи пользовательского USB-драйвера, чтобы позволить вашему приложению читать из одной или обеих мышей (хотя это, вероятно, будет вмешиваться в использование их как обычных мышей). Строительный индивидуальный пользовательский клиентские драйверы для USB-устройств были бы хорошим местом для начала того, как взаимодействовать напрямую с USB-мысами.

 

Unless you can force one of the mice to not be dealt with as a mouse, both will continue to control the pointer. However, you can use IOKit to write a custom USB HID driver to allow your app to read from one or both of the mice (although this would probably interfere with using them as normal mice). Building Customized User Client Drivers for USB Devices would be a good place to start for how to interact directly with USB mice.

</div
 
 
   
   
0
 
vote

Вы можете посмотреть на прерывание устройства USB / PS-2. Даже если вы не хотите переписать так называемый драйвер, это может быть полезно, поскольку все мыши отправляют свои данные через.

Вы также можете проверить эту страницу, которая могла бы дать некоторые намеки на http://multicursor-wm.sourceforge.net /

 

You could look at the USB/PS-2 device interrupt. Even if you don't want to rewrite a so called driver, it could be usefull since all the mice send their data through.

You could also check this page that could give some hints http://multicursor-wm.sourceforge.net/

</div
 
 
   
   
0
 
vote

Может быть, это решение для вас, чтобы использовать <код> usb->rsr232 конвертер и перейти, чтение серийного порта самостоятельно?

 

maybe it's a solution for you to use usb->rsr232 converter and go by reading the serial port by yourself ?

</div
 
 

Связанный проблема

3  Получить уведомление о создании процесса в Mac OS X  ( Get process creation notification in mac os x ) 
Я пытаюсь написать kext для Mac OS X, который будет уведомлен, когда начнется любой процесс. В Windows вы можете сделать это, вызывая PSSetloadiMageNotifyRO...

1  Подключение к базе данных DB2 (DB2 / 400) работает на iSeries AS400 через Linux / OSX  ( Connecting to db2 db2 400 database running on an iseries as400 via linux osx ) 
Мое требование простое: у меня есть веб-приложение Rails, которое необходимо прочитать некоторые данные из DB2, работающих на iSeries AS400 . С помощью All...

1  Смотреть изменения в Mac OS X  ( Watching changes in mac os x ) 
Я работаю в приложении о безопасности для Mac OS X, и мне нужно смотреть любые действия на компьютере, такими как USB, FireWire, сетевые интерфейсы, аудио IO,...

2  Развертывание нескольких рабов Дженкинса на Mac  ( Deployment of multiple jenkins slaves on a mac ) 
Я много прочитал о запуске нескольких рабов на хост-машине, у которого есть мастер Дженкинса, работающий на нем, я немного запутался тем, как двигаться вперед...

1  Как мне запустить команду во всех файлах в папке (которая имеет подпункты), используя exiftool?  ( How do i run a command on all files in a folder which has sub folders using ex ) 
У меня есть папка, называемая фотографии & amp; Видео . У него есть папки для различных лет, для которых у меня есть фотографии и видео. В течение года пап...

0  Python получает глобальные модули вместо местных внутри виртуальны  ( Python is getting global modules instead of local ones inside of virtualenv ) 
Это мой первый раз, используя virtualenv и mysqldb, и я получаю странную ошибку. После того, как я настрою этот Virtualenv, я установил MySQLDB изнутри Virtua...

2  Ошибка установки Scipy с использованием PIP3  ( Error installing scipy using pip3 ) 
Я пытаюсь установить Scipy на OS X 10.8.5, используя PIP3 следующим образом: <код> pip3 install scipy Но я получаю следующие ошибки: <код> compile opt...

0  Ошибка шины: 10 при попытке доступа к серверу с помощью SSH на MacOS  ( Bus error 10 when trying to access server using ssh on macos ) 
<Р> Я получаю странные ошибки при попытке получить доступ к своему серверу через SSH, используя Macos терминал. Ошибки я получаю Ошибка шины: 10 . Я попытался...

0  Mac Yosmite: Установите MacPorts Apache в качестве по умолчанию (Opt / local / apache2) на localhost, а не распределение OSX  ( Mac yosmite set macports apache as default opt local apache2 on localhost rat ) 
Я установил Apache через MACPPORTS, он работал нормально, но вдруг по какой-то причине он переключился на использование распределения OSX по умолчанию Apache,...

31  Включение поддержки PostgreSQL в PHP на Mac OS X  ( Enabling postgresql support in php on mac os x ) 
У меня ужасно трудно получить команду «pg_connect ()», чтобы правильно работать на моем Mac. В настоящее время я пишу PHP-скрипт (для выполнения от консоли), ...

1  Не удается подключиться к MySQL с помощью HostName WildCard  ( Cant connect to mysql with hostname wildcard ) 
Я установил <код> MySQL на мой Mac (с установщиком MAPP) и иметь проблему. Когда я создаю пользователя с хостом «@%» так: <код> CREATE USER 'test'@'%' IDEN...

2  Как r локация может быть настроено для Rstudio  ( How can the r location be customized for rstudio ) 
Я ранее использовал доморь, чтобы установить R и установщик пакета для RSTUDIO. Недавно я начал использовать Boxen, который берет на себя доме. Я должен был п...

16  Практическая практика использовать символы Unicode или формы в приложении ?  ( Is it bad practice to use unicode symbols or shapes in a app ) 
Там было несколько раз, когда я использовал символы Unicode вместо небольших иконок в одном из моих приложений какао, либо потому, что легче нарисовать встрое...

6  Unsync'd git репозиторий в dropbox  ( Unsyncd git repository in dropbox ) 
У меня есть репозиторий Git (и рабочий каталог), который хранится в моем dropbox, поэтому я могу двигаться вперед и назад между компьютерами без необходимости...

0  За петлю в Bash просто работает один раз  ( For loop in bash just runs once ) 
Я делаю проверку разрешения в Bash, но этот цикл просто работает один раз и заканчивается без ошибки: <код> for file in *; do WIDTH = $(identify -ping -f...

Связанный проблема

3  Получить уведомление о создании процесса в Mac OS X 
1  Подключение к базе данных DB2 (DB2 / 400) работает на iSeries AS400 через Linux / OSX 
1  Смотреть изменения в Mac OS X 
2  Развертывание нескольких рабов Дженкинса на Mac 
1  Как мне запустить команду во всех файлах в папке (которая имеет подпункты), используя exiftool? 
0  Python получает глобальные модули вместо местных внутри виртуальны 
2  Ошибка установки Scipy с использованием PIP3 
0  Ошибка шины: 10 при попытке доступа к серверу с помощью SSH на MacOS 
0  Mac Yosmite: Установите MacPorts Apache в качестве по умолчанию (Opt / local / apache2) на localhost, а не распределение OSX 
31  Включение поддержки PostgreSQL в PHP на Mac OS X 
1  Не удается подключиться к MySQL с помощью HostName WildCard 
2  Как r локация может быть настроено для Rstudio 
16  Практическая практика использовать символы Unicode или формы в приложении ? 
6  Unsync'd git репозиторий в dropbox 
0  За петлю в Bash просто работает один раз 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.