Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Numéro de série du disque dur

3 réponses
Avatar
Erick
Bonjour,

Comment connaitre le numéro de série d'un disque dur.

Je m'explique.

Mon application fonctionne en reseau. Données sur un serveur (Très
souvent Linux mais pas forcement).

Et j'ai besoin de recuperer à chaque lancement de l'appli, le numero de
série du disque oû sont installées les données.

J'ai un fichier .ini pour indiquer le chemin des données.
si je fais :

FichierIni est une chaîne="Fichier.INI"
CheminFic est une chaîne
CheminFic=INILit("RepFic","FIC","",fRepEnCours()+"\"+FichierIni)
SI CheminFic= "" ALORS
CheminFic=fRepEnCours()
FIN
HSubstRep("?",CheminFic)
NumDisque = fDisqueInfo(CheminFic, fdNumeroDeSerie)
Info("N° disque = "+NumDisque)

Sur un poste en WinXP il me retourne bien un N°
Mais sous Win98 il me retourne 0

Comment faire ??

Merci.

3 réponses

Avatar
Romain PETIT
Erick a pensé très fort :

Comment connaitre le numéro de série d'un disque dur.


[...]
Sur un poste en WinXP il me retourne bien un N°
Mais sous Win98 il me retourne 0



Cheminc est-il un chemin UNC ?

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Erick
Romain PETIT a écrit :
Erick a pensé très fort :

Comment connaitre le numéro de série d'un disque dur.



[...]

Sur un poste en WinXP il me retourne bien un N°
Mais sous Win98 il me retourne 0




Cheminc est-il un chemin UNC ?



Bonjour

La réponse est oui.
Avatar
farplus
Erick a émis l'idée suivante :
Bonjour,

Comment connaitre le numéro de série d'un disque dur.

Je m'explique.

Mon application fonctionne en reseau. Données sur un serveur (Très souvent
Linux mais pas forcement).

Et j'ai besoin de recuperer à chaque lancement de l'appli, le numero de série
du disque oû sont installées les données.

J'ai un fichier .ini pour indiquer le chemin des données.
si je fais :

FichierIni est une chaîne="Fichier.INI"
CheminFic est une chaîne
CheminFic=INILit("RepFic","FIC","",fRepEnCours()+""+FichierIni)
SI CheminFic= "" ALORS
CheminFic=fRepEnCours()
FIN
HSubstRep("?",CheminFic)
NumDisque = fDisqueInfo(CheminFic, fdNumeroDeSerie)
Info("N° disque = "+NumDisque)

Sur un poste en WinXP il me retourne bien un N°
Mais sous Win98 il me retourne 0

Comment faire ??

Merci.



Bonjour Erick,

Il y a qq années j'avais ce code en wd55 justement pour win98, il me
semble qu'il fonctionnait:

fonction InformationVolume(asLecteur)

RootPathName est un chaine ASciiz sur 255
GetDriveType est un entier long
NumVol est une chaine
glpBuff est un entier long // Handle de la structure 16 bit

aiLecteur est un entier
gsWindowsVer est une chaine // Version de WIndows
gHndlLib est un entier long // Handle de DLL (pour le 16 bits)

// Variables de retour de GetVolumeInformationA
VolumeNameBuffer est une chaine asciiz sur 255
VolumeNameSize est un entier long = 255
VolumeSerialNumber est un entier long
MaxComponentLength est un entier long
FilesystemFlag est une entier long
FileSystemNameBuffer est une chaine asciiz sur 255
FileSystemNameSize est une entier long = 255

// Structure de retour de PrendVolInfo (16 bits)
BOOTSec est composée de
Jump est un tableau de 3 entier court
OemName est un chaine fixe sur 8
BytePerSec est un entier sans signe
SecPerCLus est entier court
ResSect est un entier sans signe
FAT est un entier court
DirEntr est un entier sans signe
Secteur est un entier sans signe
Media est un entier court
FATSec est un entier sans signe
SecPerTr est un entier sans signe
Head est un entier sans signe
HiddenSec est un entier long
HugeSec est un entier long
DriveNum est un entier court
Reserved est un entier court
BootSig est un entier court
VolumeID est un entier long
VolLab est une chaine fixe de 11
FileSysT est une chaine fixe de 8
Fin

gsWindowsVer = versionWindows() // Récupère version de Windows (gain
de temps)

si gsWindowsVer <> "32" Alors
gHndlLib = ChargeDLL("VOLINF.DLL")
si gHndlLib = 0 alors
//Erreur : La Librairie n'est pas chargée
NumVol=""
FIN
sinon
gHndlLib = 1
Fin


si gHndlLib <>0 alors //Mode 32 bits ou 16 bits + librairie chargé
//N° correspondant au lecteur
aiLecteur=asc(asLecteur)-asc("A")

si gsWindowsVer <> "32" alors
glpBuff = &BOOTSec // Récupération de l'adresse de la structure
fin

// Récupération du numéro de série
PartieHaute est un entier sans signe
PartieBasse est un entier sans signe
ResultatFct est un booleen
RootPathName = sansespace(asLecteur) + ":"



// si gsWindowsVer = "32" alors
// GetDriveType = AppelDll32("KERNEL32", "GetDriveTypeA",
RootPathName)
// Sinon
// GetDriveType = AppelDLLLong("KERNEL", "GetDriveType", aiLEcteur)
// Fin
GETDRIVETYPE=FTYPEDISQUE(ASLECTEUR)
Si GetDriveType > 0 Alors // Problème d'accés au lecteur
// Récupération des informations du disque
Si gsWindowsVer = "32" alors

ResultatFct = Appeldll32("KERNEL32", "GetVolumeInformationA",
&RootPathName, &VolumeNameBuffer, VolumeNameSize, ...
&VolumeSerialNumber, &MaxComponentLength, &FileSystemFlag,
&FileSystemNameBuffer, ...
FileSystemNameSize)
Sinon
ResultatFct = AppelDLL("VOLINF", "PrendInfoVol", aiLecteur, glpBuff)
Fin

// Test de le résultat de la fonction d'interrrongation
Si ResultatFct Alors
si gsWindowsVer <> "32" Alors
VolumeSerialNumber = BOOTSec.VolumeID
Fin
PArtieBasse = loWord(VolumeSerialNumber)
PartieHaute = HiWord(VolumeSerialNumber)
NumVol=VersChaine(PartieHaute,"4X") + "-" +
Verschaine(PartieBasse,"4X")
sinon
//Cas de l'appication en 16 bits, sur fat autre que FAT16
// info(MessTraduit(11)) //11:Le système de protection de cette
application ne permet pas un fonctionnement correct dans ce mode
d'exécuti...

NumVol=MessTraduit(12) //12:Numéro de disque dur non obt...

Fin
sinon
// info(MessTraduit(13)) //13:Le système de protection de cette
application ne permet pas un fonctionnement correct dans ce mode
d'exécuti...
NumVol=MessTraduit(12) //12:Numéro de disque dur non obtenu

fin
si gsWindowsVer <> "32" alors
DechargeDLL(gHndlLib)
Fin
fin


renvoyer NumVol

à essayer peut-être ...

A+

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com