Несколько мышей на OS X
Я разрабатываю приложение OS X, которое должно принимать данные от двух мышей. Я хочу прочитать движение каждой мыши самостоятельно. Какой был бы лучший способ сделать это?
Если это невозможно, существует ли способ отключить/разрешить любую из программ программно?
Ответы
Ответ 1
Интерфейс устройства HID Class определенно то, что вам нужно. Существуют два этапа:
Сначала вам нужно найти мышиные устройства. Для этого вам нужно построить соответствующий словарь, а затем выполнить поиск в реестре 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/кнопок с устройств, которые вы обнаружили выше. Этот пример кода должен указывать на вас в правильном направлении. Использование обратных вызовов намного эффективнее, чем опрос!
HID-код выглядит намного сложнее, чем он - он сделал довольно "многословным" материал CF.
Ответ 2
Похоже, что HID Manager - это то, что вы ищете.
Ответ 3
Вам нужно будет проверить содержимое менеджера I/O Kit и HID (Human Interface Device).
Менеджер HID является частью I/O Kit, поэтому поиск там может быть полезен. Существует два API для управления HID, более старый API является немного более болезненным, а затем у вас есть новый 10.5 и выше API, который немного удобнее.
Важно понять, что это не будет, вероятно, просто быстрым решением, для его запуска может потребоваться значительная работа. Если вы можете предположить, что у вас будет установлено 10.5 или лучше, использование Leopard API определенно поможет.
Также; в зависимости от того, как вы выполняете то, что вы делаете, может быть важно, чтобы вы спрятали курсор мыши, поскольку он все равно может сильно перемещаться, даже если вы получаете информацию от обеих мышей. Если ваше приложение захватывает экран, я бы использовал CoreGraphics, чтобы отключить курсор и просто нарисовать свой собственный.
Вы также можете рассмотреть возможность поиска оболочки для одного из этих API, пример можно найти в этом вопросе.
Ответ 4
Если вы не можете заставить одну из мышей не обрабатываться как мышь, обе будут продолжать управлять указателем. Однако вы можете использовать IOKit для написания пользовательского драйвера USB HID, чтобы ваше приложение могло читать от одной или обеих мышей (хотя это, вероятно, помешало бы использовать их в качестве обычных мышей). Создание пользовательских клиентских драйверов для USB-устройств было бы хорошим местом для начала взаимодействия с USB-мышами.
Ответ 5
Вы можете посмотреть прерывание устройства USB/PS-2.
Даже если вы не хотите переписывать так называемый драйвер, это может быть полезно, так как все мыши отправляют свои данные через.
Вы также можете проверить эту страницу, которая могла бы дать некоторые подсказки http://multicursor-wm.sourceforge.net/
Ответ 6
Может быть, это решение для вас использовать конвертер usb->rsr232
и переходить к самому последовательному порту?