Мне нужно получить серийный номер HD на OSX. До сих пор я не мог найти примеры Delphi.Получить серийный номер OSX HD
Я нашел этот пример C++ Builder:
AnsiString GetSerialNumber()
{
AnsiString result;
io_service_t platformExpert =
IOServiceGetMatchingService(kIOMasterPortDefault,
IOServiceMatching("IOPlatformExpertDevice"));
if (platformExpert) {
CFTypeRef serialNumberAsCFString =
IORegistryEntryCreateCFProperty(platformExpert,
CFSTR(kIOPlatformSerialNumberKey),
kCFAllocatorDefault, 0);
if (serialNumberAsCFString)
{
result = CFStringGetCStringPtr((CFStringRef) serialNumberAsCFString, 0);
CFRelease(serialNumberAsCFString);
}
IOObjectRelease(platformExpert);
}
return result;
}
Я использую XE7.
Помогите портировать это в Delphi, будем высоко оценены.
@David - в Macapi.IOKit, IOServiceGetMatchingService пункт CFDictionaryRef в то время как IOServiceMatching точка на CFMutableDictionaryRef.
Не удалось найти какой-либо документ, как отличать CFMutableDictionaryRef с CFDictionaryRef.
Вот что я придумал до сих пор:
function GetMacSerialNo: String;
Const
kIOPlatformSerialNumberKey = 'IOPlatformSerialNumber';
Var
PlatformExpert: io_service_t;
M: CFMutableDictionaryRef;
SerialNumberAsCFString: CFTypeRef;
_AnsiChar: PAnsiChar;
begin
M := IOServiceMatching('IOPlatformExpertDevice');
PlatformExpert := IOServiceGetMatchingService(kIOMasterPortDefault,M); --> E2010 Incompatible types: 'CFDictionaryRef' and 'CFMutableDictionaryRef'
SerialNumberAsCFString := IORegistryEntryCreateCFProperty(PlatformExpert,
CFSTR(kIOPlatformSerialNumberKey),kCFAllocatorDefault,0);
_AnsiChar := CFStringGetCStringPtr(SerialNumberAsCFString,0);
Result := String(AnsiString(_AnsiChar));
end;
Посмотрите на 'FileSystemAttributes' в' System.SysUtils' (если у вас есть Delphi Professional или выше). Хотя он не находит идентификатор тома, он показывает, как получить информацию об объеме в OS X. – Hans
@Hans - Спасибо, но FSCatalogInfo не предоставляет никакой информации об идентификаторе тома. – DanielH
Вы, кажется, просите нас перенести код для вас. Что мешает вам писать код? –