我需要在我的应用程序中获取显卡信息。我需要的信息与Graphics/Displays:部分下的*system_profiler SPDisplays*命令显示的信息相同。我已经考虑过使用sysctl(),但我无法在 sysctl.h 中为显卡找到合适的硬件选择器
任何建议都非常受欢迎。
我需要在我的应用程序中获取显卡信息。我需要的信息与Graphics/Displays:部分下的*system_profiler SPDisplays*命令显示的信息相同。我已经考虑过使用sysctl(),但我无法在 sysctl.h 中为显卡找到合适的硬件选择器
任何建议都非常受欢迎。
在摆弄 IOKit 之后,我设法获取了所需的信息。代码可以在这里(原始来源)和下面看到:
- (void)displayGraphicsInfo
{
// Get dictionary of all the PCI Devicces
CFMutableDictionaryRef matchDict = IOServiceMatching("IOPCIDevice");
// Create an iterator
io_iterator_t iterator;
if (IOServiceGetMatchingServices(kIOMasterPortDefault,matchDict,
&iterator) == kIOReturnSuccess)
{
// Iterator for devices found
io_registry_entry_t regEntry;
while ((regEntry = IOIteratorNext(iterator))) {
// Put this services object into a dictionary object.
CFMutableDictionaryRef serviceDictionary;
if (IORegistryEntryCreateCFProperties(regEntry,
&serviceDictionary,
kCFAllocatorDefault,
kNilOptions) != kIOReturnSuccess)
{
// Service dictionary creation failed.
IOObjectRelease(regEntry);
continue;
}
const void *GPUModel = CFDictionaryGetValue(serviceDictionary, @"model");
if (GPUModel != nil) {
if (CFGetTypeID(GPUModel) == CFDataGetTypeID()) {
// Create a string from the CFDataRef.
NSString *modelName = [[NSString alloc] initWithData:
(NSData *)GPUModel encoding:NSASCIIStringEncoding];
NSLog(@"GPU Model: %@", modelName);
[modelName release];
}
}
// Release the dictionary
CFRelease(serviceDictionary);
// Release the serviceObject
IOObjectRelease(regEntry);
}
// Release the iterator
IOObjectRelease(iterator);
}
}