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 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.
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
// 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
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
// 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
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
// 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