Re: API for fetching the computer name in cocoa
Re: API for fetching the computer name in cocoa
- Subject: Re: API for fetching the computer name in cocoa
- From: "Gerriet M. Denkmann" <email@hidden>
- Date: Fri, 12 Jun 2009 09:28:22 +0200
On 12 Jun 2009, at 08:58, Graham Cox wrote:
On 12/06/2009, at 4:24 PM, Gerriet M. Denkmann wrote:
On 11 Jun 2009, at 18:55, Graham Cox <email@hidden> wrote:
On 12/06/2009, at 2:08 AM, Arun wrote:
Hi All,
Is there any API in cocoa which can be used to fetch computer name
which is
getting displayed in Finder?
I'm not sure if there's a better way, but you can use the Gestalt
function with the gestaltUserVisibleMachineName selector.
I tried:
SInt32 response = 0xdeadbeef;
OSErr resul1 = Gestalt( gestaltUserVisibleMachineName, &response );
if ( resul1 != noErr ) .... // error handling
NSLog(@"%s response = %ld = %#lx", __FUNCTION__, response,
response);
and got no error and:
response = 1224224 = 0x12ae20
Where is my mistake?
[...]
But if you want to press on, the response is a StringPtr, which is a
pointer to a pascal string. You'll need to convert that to an
NSString, first by converting to a C string (generally easy to do -
just append a /0 and take the pointer to the 1st character), then an
NSString using a suitable encoding.
Thanks a lot.
Somehow the documentation forgot to mention the fact that the response
is a StringPtr (or did I just not see it?).
Anyway here is my final code:
SInt32 response = 0xdeadbeef;
OSErr resul1 = Gestalt( gestaltUserVisibleMachineName, &response );
if ( resul1 != noErr ) // error
{
.... error handling ....
};
StringPtr c = (void *)response;
NSUInteger cle = *c;
char *cu = malloc( cle + 1);
memcpy( cu, c + 1, cle);
cu[cle] = '\0';
NSLog(@"%s gestaltUserVisibleMachineName → \"%s\" (%lu chars)",
__FUNCTION__, cu, cle);
free(cu);
NSString *a = (NSString *)CSCopyMachineName();
NSLog(@"%s CSCopyMachineName → \"%@\"", __FUNCTION__, a);
[ a release ];
CFStringEncoding nameEncoding = 0xbeefdead;
NSString *b = (NSString *)SCDynamicStoreCopyComputerName( NULL,
&nameEncoding );
if ( nameEncoding == kCFStringEncodingMacRoman )
{
// the encoding associated with the computer or host name.
// MacRoman does NOT contain SUPERSCRIPT TWO
NSLog(@"%s SCDynamicStoreCopyComputerName → \"%@\" nameEncoding
= MacRoman", __FUNCTION__, b);
}
else
{
NSLog(@"%s SCDynamicStoreCopyComputerName → \"%@\" nameEncoding
%u", __FUNCTION__,
b, nameEncoding);
};
[ b release ];
and the result is:
... gestaltUserVisibleMachineName → "MacBook4,1" (10 chars)
... CSCopyMachineName → "Quitte²"
... SCDynamicStoreCopyComputerName → "Quitte²" nameEncoding =
MacRoman
I have no idea how my machine name (containing a SUPERSCRIPT TWO)
could ever be encoded in or associated with MacRoman, but I don't
really care.
Kind regards,
Gerriet.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden