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 <graham....@bigpond.com> 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 (Cocoa-dev@lists.apple.com)
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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to arch...@mail-archive.com