|
|
|

| | | | | | | | |  |
 | 
 | Code source : unité LRJ_WinVolumes |  |

|  |
 | |  |

|
Description : cette unité contient l'API complète concernant les volumes, disponible
uniquement à partir de Windows 2000. Elle contient les objets LRJ_TWinVolumePath, LRJ_TWinVolume,
LRJ_TWinVolumesList, LRJ_TWinVolumeMountPoint et LRJ_TWinVolumesMountPointList.
LRJ_TWinVolumesList contient la liste des LRJ_TWinVolume. LRJ_TWinVolume contient une liste
de LRJ_TWinVolumePath et l'objet LRJ_TWinVolumesMountPointList. LRJ_TWinVolume permet d'extraire
des informations sur chaque volume (nom, type,
RootPath, nombre de path, si le volume supporte les mount points) et permet de modifier
le libellé du volume ou de le monter dans un répertoire d'accueil. LRJ_TWinVolumePath contient
simplement un path. LRJ_TWinVolumesMountPointList contient la liste des LRJ_TWinVolumeMountPoint
contenus dans un volume. LRJ_TWinVolumeMountPoint encapsule un mount point dont on peut
récupérer le chemin dans le volume d'accueil et le nom du volume accueilli et que l'on peut
détruire par l'intermédiaire de cet objet.
L'unité est livrée avec une application de démonstration (
voir description plus loin
) qui utilise les fonctionnalités des objets contenus dans l'unité. Les codes de l'application
sont livrés avec l'unité pour illustrer comment utiliser les objets de
cette unité. L'application de démonstration utilise les unités
LRJ_WindowsPlus,
LRJ_ShellUtils,
LRJ_WinBrowseDialog et
LRJ_GridsPlus non livrées avec l'application.
L'unité LRJ_WinVolumes met en oeuvre les fonctions de Windows suivantes :
|
|
DeleteVolumeMountPoint
FindFirstVolume
FindFirstVolumeMountPoint
FindNextVolume
FindNextVolumeMountPoint
FindVolumeClose
FindVolumeMountPointClose
GetDriveType
GetVolumeInformation
GetVolumePathNamesForVolumeName
SetVolumeLabel
SetVolumeMountPoint
|
Déclarations publiques de l'unité
I
Télécharger l'application de démonstration
I
Exemples d'utilisations
Utilise les unités : Windows, SysUtils et
LRJ_ClassesPlus.
Version : 1.3 du 15.05.2009
Auteur : Laurent Hède
Copyright : LorenJo
Nombre de lignes : 824
Réalisée sous : Delphi 6
Systèmes compatibles : 2000, XP, Vista, serveurs
Prix : 209.00 € H.T.
Déclarations publiques de l'unité :
unit LRJ_WinVolumes;
interface
uses
Windows,
Sysutils,
LRJ_ClassesPlus;
type
LRJ_TVolumeType = (lrj_vtUnknown, lrj_vtNoDrive, lrj_vtFloppy, lrj_vtFixed, lrj_vtNetwork, lrj_vtCDROM, lrj_vtRAM);
TVarBuf = array of char;
function FindFirstVolume(var AVolumeName: string): THandle;
function FindNextVolume(const hFindVolume: THandle; var AVolumeName: string): boolean;
function FindVolumeClose(const hFindVolume: THandle): boolean;
function GetVolumePathNamesForVolumeName(const AVolumeName : string): TVarBuf; // on renvoie un buffer car il peut y avoir une serie de string
function FindFirstVolumeMountPoint(const ARootPathName : string; var AVolumeMountPointName: string): THandle;
function FindNextVolumeMountPoint(const hFindVolumeMountPoint: THandle; var AVolumeMountPointName: string): boolean;
function FindVolumeMountPointClose(const hFindVolumeMountPoint: THandle): boolean;
function SetVolumeMountPoint(const AVolumeMountPoint : string; const AVolumeName: string): boolean;
function GetVolumeNameForVolumeMountPoint(const AVolumeMountPoint : string): string;
function GetVolumePathName(const AFileName : string): string;
function DeleteVolumeMountPoint(const AVolumeMountPoint : string): boolean;
function ExtractNameFromBlackSlachedName(const ANameWithSlach: string): string;
type
//-----------OBJECT--------------------------
LRJ_TWinVolumeMountPoint = class(TObject)
.........
function Delete: boolean;
function GetVolumeName: string;
property Name: string read MOName write MOName;
end; //-----------FIN--------------------------
//-----------OBJECT--------------------------
LRJ_TWinVolumesMountPointList = class(TObject)
.........
function Count: integer;
property RootPathName: string read MORootPathName write SetRootPathName;
property VolumeMountPoint[const index: integer]: LRJ_TWinVolumeMountPoint read GetVolumeMountPoint;
end; //-----------FIN--------------------------
//-----------OBJECT--------------------------
LRJ_TWinVolumePath = class(TObject)
.........
property Path: string read MOPath;
end; //-----------FIN--------------------------
//-----------OBJECT--------------------------
LRJ_TWinVolume = class(TObject)
.........
function SetNewVolumeLabel(const ALabel: string): boolean;
function SetToMountPoint(const ADirectory: string): boolean;
function CountPath: integer;
function IfVolumePath(const APath: string): boolean;
function IfSupportMountPoint: boolean; // Doit être NTFS
function GetRootPath: string;
function GetVolumeType: LRJ_TVolumeType;
function GetVolumeTypeName(const AType: LRJ_TVolumeType): string;
property Name: string read MOName write SetName;
property VolumeLabel: string read GetVolumeLabel;
property Path[const Index: integer]: LRJ_TWinVolumePath read GetPath;
property MountPointList: LRJ_TWinVolumesMountPointList read GetMountPointList;
end; //-----------FIN--------------------------
//-----------OBJECT--------------------------
LRJ_TWinVolumesList = class(TObject)
.........
procedure RefreshList;
function GetVolumeFromPath(const APath: string): LRJ_TWinVolume;
function Count: integer;
property Volume[const index: integer]: LRJ_TWinVolume read GetVolume;
end; //-----------FIN--------------------------
|
Application de démonstration

L'onglet "Liste volume" permet de charger la liste des volumes présents sur une machine ainsi
que des chemins dans lesquels ils peuvent être montés.
L'onglet "Changer le nom du volume" permet d'attribuer un nouveau libellé pour un volume (un
lecteur). Il est possible de modifier le nom que des disques durs.
L'onglet "Liste / détruire Mount Point" permet de charger la liste des volumes mount points
présents sur une machine. On aussi détruire les mount
points (un par un) en les sélectionnant dans la liste (en cliquant la ligne du mount point dans
la liste) puis en cliquant sur le bouton "Détruire Mount point select".
L'onglet "Créer un volume mount point" permet de sélectionner un volume et un répertoire
d'accueil et de monter ce volume dans ce répertoire. Le répertoire doit être vide et se
trouver dans un disque NTFS. On ne peut monter qu'un seul volume par répertoire d'accueil.
Exemples d'utilisations
Monter un volume dans un répertoire
var
zVolList: LRJ_TWinVolumesList;
zVol: LRJ_TWinVolume;
begin
if GetVolumeNameForVolumeMountPoint(EditReperoire.Text) = '' then
begin
zVolList := LRJ_TWinVolumesList.Create;
zVol := zVolList.GetVolumeFromPath(EditPathVolume.text); // exemple 'C:\'
if assigned(zVol) then
begin
if zVol.SetToMountPoint(EditReperoire.Text) then
begin
// volume monté
end
else
LRJ_ShowMessageLastErrorString;
end;
zVolList.Free;
end;
end;
|
Charger la liste des volumes montables (sous la forme de leur path, ex: C:\) dans un comboBox
var
zVolList: LRJ_TWinVolumesList;
zVol: LRJ_TWinVolume;
i: integer;
begin
ComboBox3.Items.BeginUpdate;
ComboBox3.Clear;
zVolList := LRJ_TWinVolumesList.Create;
for i:=0 to zVolList.Count-1 do
begin
zVol := zVolList.Volume[i];
ComboBox3.Items.Add(zVol.GetRootPath);
end;
ComboBox3.Items.EndUpdate;
zVolList.Free;
end;
|
Charger la liste des mount points résidant sur une machine dans une LRJ_TStringGrid
var
zVolList: LRJ_TWinVolumesList;
i,j: Integer;
zVol: LRJ_TWinVolume;
zMountPoint: LRJ_TWinVolumeMountPoint;
zRowCount: integer;
begin
zRowCount := 2;
MOStrGridListeMountPoint.ClearCells(0,1);
zVolList := LRJ_TWinVolumesList.create;
for i:=0 to zVolList.Count-1 do
begin
zVol := zVolList.Volume[i];
if zVol.IfSupportMountPoint then
begin
for j:=0 to zVol.MountPointList.Count-1 do
begin
zMountPoint := zVol.MountPointList.VolumeMountPoint[j];
MOStrGridListeMountPoint.Cells[0, j+1] := zMountPoint.Name;
MOStrGridListeMountPoint.Cells[1, j+1] := zMountPoint.GetVolumeName;
end;
if zVol.MountPointList.Count > 0 then zRowCount := zVol.MountPointList.Count + 1;
end;
end;
zVolList.free;
MOStrGridListeMountPoint.RowCount := zRowCount;
MOStrGridListeMountPoint.ResizeCells(10);
end;
|
Changer le libellé d'un disque sélectionné dans un ComboBox
var
zVolList: LRJ_TWinVolumesList;
zVol: LRJ_TWinVolume;
begin
if ComboBox1.ItemIndex > -1 then
begin
zVolList := LRJ_TWinVolumesList.create;
zVol := zVolList.GetVolumeFromPath(ComboBox1.Items[ComboBox1.ItemIndex]); // ex: 'C:\'
if assigned(zVol) then
begin
if not zVol.SetNewVolumeLabel(EditNouveauLabel.Text) then
LRJ_ShowMessageLastErrorString;
end;
zVolList.free;
end;
end;
|
Vous n'avez pas trouvé d'exemple répondant à votre problématique ?
Cliquez sur ce lien.
|
|
 |
 | |  |
|
|