gpt4 book ai didi

cocoa - 如何在 OSX 10.5 及更高版本上检测游戏 handle 按钮按下情况?

转载 作者:行者123 更新时间:2023-12-03 16:03:58 25 4
gpt4 key购买 nike

如何在 OSX 10.5 及更高版本上检测 USB 游戏 handle 上的按钮按下情况?

我无法理解极其复杂的 HID 管理器(尽管显然它已使用 10.5 进行了简化),而且 Apple 的代码示例有数千行代码,需要几天的时间才能理解和隔离我需要的内容,所以如果有人针对这个孤立的问题发布一个简单且完整编码的解决方案,我将不胜感激。

<小时/>

编辑:到目前为止,所有答案都是指向各种 HID 设备的源代码或半模糊库的链接,这将需要比我愿意投入的更多的研究时间。我正在开始悬赏以获得解决这个简单问题的实际代码片段(是否使用外部库)。

<小时/>

编辑 POS 赏金:感谢大家的帮助;但不幸的是,系统自动选择的答案对我不起作用,不明白为什么;而且作者还没有回复我的评论。任何见解都将不胜感激,但在找到解决方案之前,任何寻找有关此主题的资源的人都应该对这个答案持保留态度。

最佳答案

首先,导入 IOKit 框架并将其包含在头文件和实现文件中:

#import <IOKit/hid/IOHIDLib.h>

在你的头文件中,你可能想要有这个变量:

IOHIDManagerRef hidManager;

然后将其添加到您的实现中:

void gamepadWasAdded(void* inContext, IOReturn inResult, void* inSender, IOHIDDeviceRef device) {
NSLog(@"Gamepad was plugged in");
}

void gamepadWasRemoved(void* inContext, IOReturn inResult, void* inSender, IOHIDDeviceRef device) {
NSLog(@"Gamepad was unplugged");
}

void gamepadAction(void* inContext, IOReturn inResult, void* inSender, IOHIDValueRef value) {
NSLog(@"Gamepad talked!");
IOHIDElementRef element = IOHIDValueGetElement(value);
NSLog(@"Element: %@", element);
int elementValue = IOHIDValueGetIntegerValue(value);
NSLog(@"Element value: %i", elementValue);
}

-(void) setupGamepad {
hidManager = IOHIDManagerCreate( kCFAllocatorDefault, kIOHIDOptionsTypeNone);
NSMutableDictionary* criterion = [[NSMutableDictionary alloc] init];
[criterion setObject: [NSNumber numberWithInt: kHIDPage_GenericDesktop] forKey: (NSString*)CFSTR(kIOHIDDeviceUsagePageKey)];
[criterion setObject: [NSNumber numberWithInt: kHIDUsage_GD_GamePad] forKey: (NSString*)CFSTR(kIOHIDDeviceUsageKey)];
IOHIDManagerSetDeviceMatching(hidManager, criterion);
IOHIDManagerRegisterDeviceMatchingCallback(hidManager, gamepadWasAdded, (void*)self);
IOHIDManagerRegisterDeviceRemovalCallback(hidManager, gamepadWasRemoved, (void*)self);
IOHIDManagerScheduleWithRunLoop(hidManager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
IOReturn tIOReturn = IOHIDManagerOpen(hidManager, kIOHIDOptionsTypeNone);
IOHIDManagerRegisterInputValueCallback(hidManager, gamepadAction, (void*)self);
}

并从 awakeFromNib 调用 setupGamepad。您也可以修改变量“kHIDUsage_GD_GamePad”来注册其他设备。我通过阅读 http://developer.apple.com/library/mac/documentation/DeviceDrivers/Conceptual/HID/hid.pdf 对上面的内容进行了编码逐步记录示例并将其与 http://abstractable.net/enjoy 中的“真实”源代码进行比较

祝你好运。

关于cocoa - 如何在 OSX 10.5 及更高版本上检测游戏 handle 按钮按下情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2234364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com