/************************************************************************ * Code created by Carl E. Lindberg - Thanks a ton Carl! * * See his RCDefaultApp and other great Mac Applications at * * http://www.rubicode.com/Software/ * ************************************************************************/ /************************************************************************ * Compile on Tiger: * * cc DUH4Mac.c -o logurls -framework CoreFoundation -framework * * ApplicationServices * * * * Compile on Leopard: * * cc DUH4Mac.c -o logurls -framework CoreFoundation -framework * * CoreServices * ************************************************************************/ /************************************************************************ * To run: * * #>./DUH4Mac * ************************************************************************ #include #include #include #if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 #include #else #include #endif /* Private Apple API... helpful for enumerating. */ extern OSStatus _LSCopySchemesAndHandlerURLs(CFArrayRef *outSchemes, CFArrayRef *outApps); static void GetBuf(CFStringRef string, char *buffer, int bufsize) { if (string == NULL) buffer[0] = '\0'; else CFStringGetCString(string, buffer, bufsize, kCFStringEncodingUTF8); } int main() { CFArrayRef apps; CFArrayRef schemes; CFArrayRef sorted_schemes; int i; printf("URL Name App (Current Path)\n"); _LSCopySchemesAndHandlerURLs(&schemes, &apps); _LSCopySchemesAndHandlerURLs(&sorted_schemes, &apps); CFIndex ind = CFArrayGetCount(sorted_schemes); CFRange range = CFRangeMake(0,ind); CFArraySortValues(sorted_schemes, range, CFStringCompare, NULL); for (i=0; i< CFArrayGetCount(schemes); i++) { CFStringRef scheme = (CFStringRef) CFArrayGetValueAtIndex(schemes, i); CFStringRef sort = (CFStringRef) CFArrayGetValueAtIndex(sorted_schemes, i); CFURLRef appURL = (CFURLRef) CFArrayGetValueAtIndex(apps, i); CFStringRef appName; CFStringRef appURLString = CFURLCopyFileSystemPath(appURL, kCFURLPOSIXPathStyle); char schemeBuf[100]; char nameBuf[300]; char urlBuf[2048]; LSCopyDisplayNameForURL(appURL, &appName); GetBuf(sort, schemeBuf, sizeof(schemeBuf)); GetBuf(appURLString, urlBuf, sizeof(urlBuf)); GetBuf(appName, nameBuf, sizeof(nameBuf)); printf("%-25s %s (%s)\n", schemeBuf, nameBuf, urlBuf); if (appURLString != NULL) CFRelease(appURLString); if (appName != NULL) CFRelease(appName); } CFRelease(apps); CFRelease(schemes); CFRelease(sorted_schemes); exit(0); return 0; }