HDD Hersteller & Model auslesen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Autonomus
Beiträge: 30
Registriert: 20.02.2015 18:21

HDD Hersteller & Model auslesen

Beitrag von Autonomus »

Hallo,

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

Bild
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
  • OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64

    CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
    RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: HDD Hersteller & Model auslesen

Beitrag von True29 »

über die Winapi geht das bestimmt.

http://www.purebasic.fr/english/viewtop ... 13&t=40483
gefunden im englishem forum
vielleicht hilft es dir.

und
http://purebasic.variopinto.net/?q=node/21
hier noch ein link.

hier der suchlink:
https://www.google.de/search?q=purebasi ... TtaOr_gtAB
i7,12gb ram , Windows 10 ,Purebasic 5.50
Autonomus
Beiträge: 30
Registriert: 20.02.2015 18:21

Re: HDD Hersteller & Model auslesen

Beitrag von Autonomus »

Danke für die Links.
Leider hilft mir das nur Ansatzweise.
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
  • OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64

    CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
    RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: HDD Hersteller & Model auslesen

Beitrag von Kiffi »

Autonomus hat geschrieben:Leider hilft mir das nur Ansatzweise.
das heißt konkret?
a²+b²=mc²
Autonomus
Beiträge: 30
Registriert: 20.02.2015 18:21

Re: HDD Hersteller & Model auslesen

Beitrag von Autonomus »

Wenn möglich dann bräuchte ich nur den HDD Hersteller, alternativ reicht auch der Hersteller + Seriennummer.

Die meisten Codes die ich gefunden habe funktionieren nur bei Windows.
Hab schon versucht raus zu finden in wie weit mir Assembler helfen könnte aber mich durch Tage- möglicherweise Wochenlanges lernen von Assembler zu durchforsten, würde zu lange dauern. Deswegen suche ich hier bei euch Hilfe zu dem Thema.

Ich schreibe gerade an einem Programm das mir verschiedene Informationen über verschiedene System anzeigen soll.
Beim versuch möglichst crossplatformunabhängig zu bleiben, musste ich feststellen das mein Wissen darüber leider nicht ausreicht.

Dann habe ich einen Code gefunden wozu man dann aber Comate oder so ähnlich benötigt.
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
  • OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64

    CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
    RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: HDD Hersteller & Model auslesen

Beitrag von Kiffi »

Autonomus hat geschrieben:Die meisten Codes die ich gefunden habe funktionieren nur bei Windows.
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).

Der Großteil der Leute hier programmieren unter Windows. Aus diesem Grund bekommt man in der Regel auch entsprechende Tipps.

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: HDD Hersteller & Model auslesen

Beitrag von Shardik »

Mit dem folgenden Beispiel-Code kann man sich in Linux die Modellbezeichnungen aller Speichermedien anzeigen lassen. Dazu wird der Konsolenbefehl lsblk verwendet, der im Gegensatz zu mehreren anderen alternativen Konsolenbefehlen keine root-Rechte benötigt. Außerdem dürfte lsblk wohl auf den meisten aktuellen Linux-Distributionen vorinstalliert sein. Erfolgreich getestet habe ich das Programm auf folgenden Distributionen:
- Bodhi Linux 2.4 x86
- ElementaryOS 0.2 x86
- Fedora 20 x86
- Kubuntu 12.04 x86
- Linux Mint 17 x86
- Lubuntu 14.04 x86
- PearOS 8 x86
- Ubuntu 12.04 x86
- Ubuntu 14.04 x64
- Xubuntu 14.04 x86

Auf der folgenden alten Ubuntu-Distribution war lsblk nicht vorinstalliert:
- Ubuntu 10.04 x86 (Support im Mai 2013 abgelaufen)

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)
Und hier ist ein Beispiel für MacOS X (getestet auf MacOS X 10.6.8 / Snow Leopard), das die Modellbezeichnung einer Festplatte programmatisch (mit Apples DiskArbitration-Framework) ermittelt:

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
Wolfram
Beiträge: 28
Registriert: 23.08.2013 14:38
Computerausstattung: OSX 10.13 | PB 5.46

Re: HDD Hersteller & Model auslesen

Beitrag von Wolfram »

Hallo Shardik,

wie lautet den der key für die Device Größe?
Und wo hast du den Key DADeviceModel her?
OSX 10.13 | PB 5.46
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: HDD Hersteller & Model auslesen

Beitrag von Shardik »

Wolfram hat geschrieben:wie lautet den der key für die Device Größe?
DAMediaSize
Wolfram hat geschrieben:Und wo hast du den Key DADeviceModel her?
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:

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
Antworten