这是一个将它们组合在一起的整个应用程序(http://cl.ly/40Hw):
/*
DisplayID.m
Author: Robert Harder, rob@iHarder.net
with help from http://stackoverflow.com/questions/1236498/how-to-get-the-display-name-with-the-display-id-in-mac-os-x
Returns a list of display names and display IDs.
Add the flag -v for more information on the screens.
Compile from the command line:
cc DisplayID.m -o DisplayID \
-framework AppKit -framework Foundation -framework IOKit \
-arch x86_64 -arch i386 -arch ppc7400
Examples:
$ DisplayID
Color LCD : 69675202
$ DisplayID -v
Color LCD : 69675202
{
NSDeviceBitsPerSample = 8;
NSDeviceColorSpaceName = NSCalibratedRGBColorSpace;
NSDeviceIsScreen = YES;
NSDeviceResolution = "NSSize: {72, 72}";
NSDeviceSize = "NSSize: {1440, 900}";
NSScreenNumber = 69675202;
}
*/
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import <IOKit/graphics/IOGraphicsLib.h>
#define str_eq(s1,s2) (!strcmp ((s1),(s2)))
NSString* screenNameForDisplay(CGDirectDisplayID displayID )
{
NSString *screenName = nil;
NSDictionary *deviceInfo = (NSDictionary *)IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID), kIODisplayOnlyPreferredName);
NSDictionary *localizedNames = [deviceInfo objectForKey:[NSString stringWithUTF8String:kDisplayProductName]];
if ([localizedNames count] > 0) {
screenName = [[localizedNames objectForKey:[[localizedNames allKeys] objectAtIndex:0]] retain];
}
[deviceInfo release];
return [screenName autorelease];
}
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
BOOL verbose = NO;
BOOL extraVerbose = NO;
if( argc >= 2 ){
if( str_eq( "-v",argv[1]) ){
verbose = YES;
} else if( str_eq( "-vv", argv[1] ) ){
verbose = YES;
extraVerbose = YES;
} else {
printf("USAGE: %s [-v[v]]\n", argv[0]);
printf("Prints a list of names and numeric IDs for attached displays.\n");
printf(" -v Verbose mode. Prints more information about each display.\n");
printf(" -vv Extra verbose. Prints even more information.\n");
return argc;
}
}
NSArray *screenArray = [NSScreen screens];
for( NSScreen *screen in screenArray ){
NSDictionary *screenDescription = [screen deviceDescription];
NSNumber *displayID = [screenDescription objectForKey:@"NSScreenNumber"];
NSString *displayName =screenNameForDisplay([displayID intValue]);
printf( "%s : %d\n", [displayName UTF8String], [displayID intValue]);
if( verbose ){
printf( "%s\n", [[screenDescription description] UTF8String] );
}
if( extraVerbose ){
NSDictionary *deviceInfo = (NSDictionary *)IODisplayCreateInfoDictionary(CGDisplayIOServicePort([displayID intValue]), kIODisplayOnlyPreferredName);
printf( "%s\n", [[deviceInfo description] UTF8String] );
}
} // end for:
[pool drain];
return 0;
}