suche eine Möglichkeit den HDD Hersteller und das Model auszulesen.
Unter der Suchfunktion habe ich bisher nur Möglichkeiten zum auslesen von HDD Model gefunden.
Kennt jemand von euch einen Weg?
Danke schonmal
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)
EndIfDAMediaSizeWolfram 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