Несколько мышей на OS X - PullRequest
17 голосов
/ 12 мая 2009

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

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

Ответы [ 6 ]

13 голосов
/ 19 мая 2009

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

Сначала вам нужно найти устройства мыши. Для этого вам нужно создать соответствующий словарь и затем выполнить поиск в реестре ввода-вывода. Вот пример кода здесь , вам нужно будет добавить некоторые дополнительные элементы в словарь, чтобы вы просто получили мышь вместо всех устройств 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 / с устройств, которые вы нашли выше. Этот пример кода должен указать вам правильное направление. Использование обратных вызовов намного эффективнее, чем опрос!

Код HID выглядит намного сложнее, чем он есть - он сделан довольно "многословно" из-за CF-вещей.

7 голосов
/ 15 мая 2009

Похоже, HID Manager - это то, что вы ищете.

3 голосов
/ 16 мая 2009

Вы захотите проверить материалы менеджера I / O Kit и HID (Human Interface Device).

Менеджер HID является частью I / O Kit , так что поиск там может быть полезным. Есть два API для управления HID, более старый API немного более болезненный, и тогда у вас есть новый 10.5 и выше API , который немного более удобен.

Важно понимать, что это, вероятно, не будет быстрым решением, для его запуска может потребоваться значительная работа. Если вы можете предположить, что у вас установлено 10.5 или выше, использование Leopard API определенно поможет.

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

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

1 голос
/ 15 мая 2009

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

0 голосов
/ 20 мая 2009

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

0 голосов
/ 15 мая 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...