HDD Hersteller & Model auslesen
Verfasst: 20.02.2015 19:10
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
das heißt konkret?Autonomus hat geschrieben:Leider hilft mir das nur Ansatzweise.
das ist eine durchaus wichtige Info, die Du bei zukünftigen Anfragen erwähnen solltest (wenn Du immer crossplattform-Codes benötigst, dann schreib es am besten in Deine Signatur).Autonomus hat geschrieben:Die meisten Codes die ich gefunden habe funktionieren nur bei Windows.
Code: Alles auswählen
EnableExplicit
Define ProgramID.I
Define Output.S
ProgramID = RunProgram("lsblk", "--nodeps --noheadings -o model", "", #PB_Program_Open | #PB_Program_Read)
If ProgramID
While ProgramRunning(ProgramID)
If AvailableProgramOutput(ProgramID)
Output + ReadProgramString(ProgramID) + #CR$
EndIf
Wend
CloseProgram(ProgramID)
EndIf
MessageRequester("Speichermedien", Output)
Code: Alles auswählen
EnableExplicit
#DiskID = "disk0"
ImportC "/System/Library/Frameworks/DiskArbitration.framework/DiskArbitration"
DADiskCopyDescription(DADiskRef.I)
DADiskCreateFromBSDName(CFAllocatorRef.I, DASessionRef.I, BSDDeviceName.P-ASCII)
DASessionCreate(CFAllocatorRef.I)
EndImport
Define Dictionary.I
Define Disk.I
Define HDDModel.S
Define Session.I
Define QuadNumber.Q
Session = DASessionCreate(0)
If Session
Disk = DADiskCreateFromBSDName(0, Session, #DiskID)
If Disk
Dictionary = DADiskCopyDescription(Disk)
If Dictionary
HDDModel = PeekS(CocoaMessage(0,
CocoaMessage(0, Dictionary, "objectForKey:$", @"DADeviceModel"),
"UTF8String"), -1, #PB_UTF8)
MessageRequester("Harddisk model:", HDDModel)
CFRelease_(Dictionary)
EndIf
CFRelease_(Disk)
EndIf
CFRelease_(Session)
EndIf
DAMediaSizeWolfram hat geschrieben:wie lautet den der key für die Device Größe?
Ich habe 2015 diesen C-Quellcode in Teilen nach PureBasic portiert. Er gibt alle Infos aus. Ich habe allerdings noch nicht alle Variablentypen umgesetzt, z.B. NSTaggedPointerString oder NSCFDictionary, weil ich diese Infos nicht benötigte. Ich habe daher bei allen nicht abgefangenen Variablentypen den Typ statt den eigentlichen Wert ausgegeben. Ich habe das portierte Programm jetzt gerade noch einmal erfolgreich unter MacOS 10.14.6 'Mojave' mit PB 5.72 x64 getestet:Wolfram hat geschrieben:Und wo hast du den Key DADeviceModel her?
Code: Alles auswählen
EnableExplicit
ImportC "/System/Library/Frameworks/DiskArbitration.framework/DiskArbitration"
DADiskCopyDescription(DADiskRef.I)
DADiskCreateFromBSDName(CFAllocatorRef.I, DASessionRef.I,
BSDDeviceName.P-ASCII)
DASessionCreate(CFAllocatorRef.I)
EndImport
Define Dictionary.I
Define Disk.I
Define i.I
Define KeyArray.I
Define KeyContent.S
Define KeyName.S
Define KeyObject.I
Define Session.I
Define QuadNumber.Q
Session = DASessionCreate(0)
If Session
Disk = DADiskCreateFromBSDName(0, Session, "disk0")
If Disk
Dictionary = DADiskCopyDescription(Disk)
If Dictionary
KeyArray = CocoaMessage(0, Dictionary, "allKeys")
For i = 0 To CocoaMessage(0, KeyArray, "count") - 1
KeyName = PeekS(CocoaMessage(0,
CocoaMessage(0, KeyArray, "objectAtIndex:", i),
"UTF8String"), -1, #PB_UTF8)
KeyObject = CocoaMessage(0, Dictionary, "objectForKey:$", @KeyName)
Select ReplaceString(PeekS(CocoaMessage(0, CocoaMessage(0,
KeyObject, "className"), "UTF8String"), -1, #PB_UTF8), "_", "")
Case "NSCFString"
KeyContent = PeekS(CocoaMessage(0,
CocoaMessage(0, Dictionary, "objectForKey:$", @KeyName),
"UTF8String"), -1, #PB_UTF8)
Case "NSCFBoolean"
If CocoaMessage(0, KeyObject, "boolValue")
KeyContent = "True"
Else
KeyContent = "False"
EndIf
Case "NSCFNumber"
CocoaMessage(@QuadNumber, KeyObject, "unsignedLongLongValue")
KeyContent = Str(QuadNumber)
Default
KeyContent = ReplaceString(PeekS(CocoaMessage(0, CocoaMessage(0,
KeyObject, "className"), "UTF8String"), -1, #PB_UTF8), "_", "")
EndSelect
Debug KeyName + ": " + KeyContent
Next i
CFRelease_(Dictionary)
EndIf
CFRelease_(Disk)
EndIf
CFRelease_(Session)
EndIf