Lib InfoHD retourne des informations physique du disque dur

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Lib InfoHD retourne des informations physique du disque dur

Message par julien »

Voici ma nouvelle lib : InfoHD()


Cette librairie permet d'avoir des informations sur le disque dur :

- Numero de serie physique (pas du volume)
- Nom d'usine du disque dur
- Version du Firmware

Le lien :
http://purebasic.free.fr/Purebasic/userlib/infoHd.zip

Je l'ai testé sous Windows 2000 et XP avec des disque dur recent. Si vous pouviez la tester sous Win98 et avec vos disque dur ! :wink:
Dîtes moi ce que vous en pensez :)


Voici un exemple d'utilisation

Code : Tout sélectionner

; Exemple
MessageRequester("Model",InfoHD(0,#HD_Model),0)
MessageRequester("Numero de série physique",InfoHD(0,#HD_Serie),0)
MessageRequester("Version du Firmware",InfoHD(0,#HD_Firmware),0)
MessageRequester("Toutes les informations",InfoHD(0,#HD_tout),0)
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

tu es bon pour crée les lib toi
Bravo felicitation
j'aime beaucoup tes libs
Remy Vincent
Messages : 12
Inscription : sam. 15/oct./2005 18:33
Contact :

Message par Remy Vincent »

Mon dieu, j'ai quatres messages vides, est-ce normal ... ?
par contre les titres sont exactement les mêmes que dans le code!
Je suis trop frustré.., mais je peux pas tester plus sur mon Windows 98 ( sans les sources de "InfoHD" ).

Bon courage


PS: VersionLibHD() affiche "1.00", je n'ai peut-être pas téléchargé la bonne version??
Les groupes affadissent votre QI
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Malgré son message plus qu'idiot parce que provocateur, il a raison... marche pas sous Win 98.
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

C'est quoi le model de votre disque dur, je pense que ça ne fonctionne pas sur les disque ne supportant pas la tech. smart
Edit : Normalement si ça echoue la fonction retourne "-1"
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Pas mal, lib en opensource ? :idea:
J'aimerais bien y jeter un oeil (simple curiosité) :roll:
"Qui baise trop bouffe un poil." P. Desproges
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Exemple pour le numéro de série du disque dur (d'après un code de Rings).
Fonctionne aussi sous Win9x.

Code : Tout sélectionner

Procedure.s ChangeHighLowByte(Instring.s) ;Change Big-Little Endian
  Protected sdummy.s, l.l, I.l
  l = Len(Instring)
  For I = 1 To l Step 2
    If (I + 1) <= l
      sdummy = sdummy + Mid(Instring, I + 1, 1) + Mid(Instring, I, 1)
    EndIf
  Next I
  ProcedureReturn sdummy
EndProcedure
Structure IDEREGS
  bFeaturesReg.b
  bSectorCountReg.b
  bSectorNumberReg.b
  bCylLowReg.b
  bCylHighReg.b
  bDriveHeadReg.b
  bCommandReg.b
  bReserved.b
EndStructure
Structure DRIVERSTATUS
  bDriveError.b
  bIDEStatus.b
  bReserved.b[2]
  dwReserved.l[2]
EndStructure
Structure SENDCMDINPARAMS
  cBufferSize.l
  irDriveRegs.IDEREGS
  bDriveNumber.b
  bReserved.b[3]
  dwReserved.l[4]
EndStructure
Structure SENDCMDOUTPARAMS
  cBufferSize.l
  DStatus.DRIVERSTATUS
  bBuffer.b[512]
EndStructure
#DFP_RECEIVE_DRIVE_DATA = $7C088
ProcedureDLL.s GetDriveSerial(PhysicalDrive.l) ; Retrieves physical drive serial [empty string if failed]
  Protected  mvarCurrentDrive.l, VersionInfo.OSVERSIONINFO, Platform.l, hdh.l, br.l, Result.l
  Protected bin.SENDCMDINPARAMS, bout.SENDCMDOUTPARAMS, Serial.s
  If PhysicalDrive >= 0 And PhysicalDrive <= 255
    VersionInfo\dwOSVersionInfoSize = SizeOf(OSVERSIONINFO)
    Platform = GetVersionEx_(VersionInfo)
    If Platform
      If VersionInfo\dwPlatformId = #VER_PLATFORM_WIN32_WINDOWS ; Win9x/Me
        hdh = CreateFile_("\\.\SMARTVSD", #GENERIC_READ, #FILE_SHARE_READ, 0, #OPEN_EXISTING, 0, 0)
      Else ; NT kernel
        hdh = CreateFile_("\\.\PhysicalDrive" + Str(PhysicalDrive), #GENERIC_READ | #GENERIC_WRITE, #FILE_SHARE_READ | #FILE_SHARE_WRITE, 0, #OPEN_EXISTING, 0, 0)
      EndIf
    EndIf
    If hdh <> #INVALID_HANDLE_VALUE
      bin\bDriveNumber = PhysicalDrive
      bin\cBufferSize = 512
      If PhysicalDrive & 1
        bin\irDriveRegs\bDriveHeadReg = $B0
      Else
        bin\irDriveRegs\bDriveHeadReg = $A0
      EndIf
      bin\irDriveRegs\bCommandReg = $EC
      bin\irDriveRegs\bSectorCountReg = 1
      bin\irDriveRegs\bSectorNumberReg = 1
      Result = DeviceIoControl_(hdh, #DFP_RECEIVE_DRIVE_DATA, bin, SizeOf(SENDCMDINPARAMS), bout, SizeOf(SENDCMDOUTPARAMS), @br, 0)
      If br > 0
        Serial = Trim(ChangeHighLowByte(PeekS(@bout\bBuffer[0] + 20, 20)))
      EndIf
    EndIf
  EndIf
  ProcedureReturn Serial
EndProcedure
Debug GetDriveSerial(0)
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Ok, c'est juste que j'avais codé et posté un truc similaire et je voulais voire comment Rings s'y étais pris pour le support win98 :)
"Qui baise trop bouffe un poil." P. Desproges
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

En fait, le code original de Rings ne le supporte pas !
La solution vient plus tard dans le thread : http://forums.purebasic.com/english/vie ... php?t=6599
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

oui oui, j'avais vu ça ;) (j'avais rien trouvé sur la MSDN).
"Qui baise trop bouffe un poil." P. Desproges
Répondre