Code source
Code source

  Présentation
  Unités exemple gratuites
  Unités commercialisées
  Conditions d'utilisation
  Comment acheter
  Vendez vos codes
Unités commercialisées

  LRJ_DosDevice
  LRJ_FileMapped
  LRJ_ModifDateTime
  LRJ_ShellUtils
  LRJ_TokenAPI
  LRJ_WinACL
  LRJ_WinBrowseDialog
  LRJ_WinCreateProcess
  LRJ_WinDesktop
  LRJ_WinDirectories
  LRJ_WinDocRecents
  LRJ_WinDrives
  LRJ_WinFavorisWeb
  LRJ_WinFiles
  LRJ_WinIconNotifArea
  LRJ_WinInternetShortcut
  LRJ_WinMenuFolder
  LRJ_WinModule
  LRJ_WinNetApi
  LRJ_WinNetLocalGroups
  LRJ_WinNetUsers
  LRJ_WinPrivileges
  LRJ_WinProcess
  LRJ_WinRecycleBin
  LRJ_WinRegion
  LRJ_WinRegAppPath
  LRJ_WinShellLink
  LRJ_WinShellUI
  LRJ_WinSID
  LRJ_WinStation
  LRJ_WinTokenGroups
  LRJ_WinTrackChangeDir
  LRJ_WinVolumes
  LRJ_WinWorkingSet

   Accueil | GlobalDesk | Code source Delphi | Développements | Votre compte | Contact   

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.


 Accueil | GlobalDesk | Code source Delphi | Développements | Votre compte | Contact 
Copyright © LorenJo 2000-2009    Notice légale