Listage des lecteurs logique d'un ordinateur [Résolu]

Signaler
Messages postés
5
Date d'inscription
vendredi 4 juillet 2003
Statut
Membre
Dernière intervention
19 décembre 2006
-
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
-
Salut tt le monde:
je cherche comment lister tt les lecteur logique (Hdd/partition, CD-Rom, Lecteur amovible, lecteur disquette) d'un ordinateur,
merci pour votre aide et bonne chance

[font=Verdana]XeNoS[/font=Verdana

14 réponses

Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Salut,

Regarde ici : http://www.developpez.com/delphi/faq/?page=lecteur

A +
Thierry
Messages postés
5
Date d'inscription
vendredi 4 juillet 2003
Statut
Membre
Dernière intervention
19 décembre 2006

Merci a vous ts pour votre aide ... c trés sympa...
voilà une procedure et une fonctin que j'ai recupérer depuis un site et que j'ai modifier

//cette Procedure affiche les noms des lecteurs logique ...
Procedure LogicalDrives();
var   DriveBits: set of 0..25;
      Drives, DriveNum: Integer;
      DriveLetter:      String;
      ListDrive:        String;
begin
     Drives := GetLogicalDrives();
     if Drives <> 0 then
     begin
        Integer(DriveBits) := Drives;
        for DriveNum := 0 to 25 do
        begin
           if (DriveNum in DriveBits) then
           begin
              DriveLetter := Char(DriveNum+Ord('A'))+':';
              WriteLn('Lecteur : ', DriveLetter);;
           end;
        end;
     end;
end;

//cette fonction renvoi une liste des lecteurs logique sous la forme ACDEF , A= le 1er lecteur, B= Le 2eme ... etc...
Function LogicalDrives(): String;
var   DriveBits: set of 0..25;
      Drives, DriveNum: Integer;
      DriveLetter:      String;
      ListDrive:        String;
begin
   try
     Drives := GetLogicalDrives();
     if Drives <> 0 then
     begin
        Integer(DriveBits) := Drives;
        for DriveNum := 0 to 25 do
        begin
           if (DriveNum in DriveBits) then
           begin
              DriveLetter := Char(DriveNum+Ord('A'));
              ListDrive := ListDrive+DriveLetter;
           end;
        end;
     end
     else
        ListDrive := '';
   finally
     Result := ListDrive;
   end;
end;

[font=Verdana]XeNoS[/font=Verdana
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Salut,

Un bouton, un memo, et ce code :

procedure TForm1.Button1Click(Sender: TObject);
var
  Drive: Char;
  DriveLetter: string;
begin
  for Drive := 'A' to 'Z' do
  begin
    DriveLetter := Drive + ':\';
    with Memo1.Lines do
    case GetDriveType(PChar(DriveLetter)) of
      DRIVE_REMOVABLE:  Add(DriveLetter + ' Floppy Drive');
      DRIVE_FIXED:      Add(DriveLetter + ' Fixed Drive');
      DRIVE_REMOTE:     Add(DriveLetter + ' Network Drive');
      DRIVE_CDROM:      Add(DriveLetter + ' CD-ROM Drive');
      DRIVE_RAMDISK:    Add(DriveLetter + ' RAM Disk');
    end;
  end;
end;

Et c'est tout...
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Pardon, désolé ThWilliam...
Mais il faut 3 heures avant que mon message s'uploade... argghhh.... trop tard pour l'arrêter.
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
Salut,

 Je ne sais pas si cela peux aider mais je suis entrain de travailler en ce moment sur un travail similaire.(voir ejecter un lecteur usb)
Donc moi je vais chercher ici sur la base de registre

HKLM\system\MountedDevices
tu as ce qui est connecté et ce qui a été connecté.
Après si tu sais lire la base de registre c'est un jeu d'enfant.

couf

Salut

@Couf : Oui peut etre mais la base de registre dépend de ton OS ce qui est une sacré limitation. A mon avis, les solutions de ThWilliam et Japee sont plus flexibles.
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
Salut,

effectivement Franky23012301, j'ai la faculté de prendre des chars dassault,
pour démolir des maisons en pailles :-D
Tu as raison
couf

Merci pour Dassault Aviation tu viens de leur faire de la pub gratos
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
Salut,

 Je sais bien que tu as trouvé une solution en revanche, je me suis amusé
à refaire un code si cela interesse certains avec la base de registre et 2 Listbox
Un pour les lecteurs , et l'autre pour avoir les valeurs des clés cela te permet de savoir le type de lecteur USB , ide, réseaux ....
cela donne à peuprès ce petit bout de code
***********************************************************
***********************************************************
procedure TForm1.Button1Click(Sender: TObject);
var reg :tregistry; {ne pas oublier uses registry}
         compt, i: integer;
 s_Ch1,  s_Ch,  ch :string;
     ListBox:TListBox;
begin
  reg:= tregistry.Create;
//valeur racine
  reg.RootKey:= HKEY_LOCAL_MACHINE;
//clé et sous clé
  reg.OpenKey('\SYSTEM\MountedDevices',false);
//ici on met les valeurs des clés dans le list box
 Reg.GetValueNames(listbox1.Items);
 compt:= listbox1.Count -1;
 For i:= 0 to compt -1 do
 begin
//procédure pour récupérer les lettres des lecteurs
 ch := listbox1.Items.Strings[i];
 s_Ch:=copy(ch,1,12);
 if s_Ch='\DosDevices\'
 then
 begin
 s_ch1:= copy(ch,13,2) ;
 listbox2.Items.Add(s_CH1)
  end;
    end;
    reg.CloseKey;
  reg.Free;
end;
end.
****************************************************************
****************************************************************

Voila le code n'est pas très estéthique, mais cela donne une autre façon de faire.
Et surtout permet de savoir ce qui s'est connecté sur le poste.
On peut pousser plus loin avec ce type de code, pour savoir qui s'est connecté sur un serveur, et comment.....

couf  
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Salut,


Intéressant, toutes ces approches...


"le code n'est pas très estéthique"


Puisque tu le dis, couf...

Je me suis donc autorisé à le relooker, ce code... pas pour faire le
malin, mais on est là pour échanger et s'améliorer, pas vrai ?

Donc, après un régime minceur, ça donne :

procedure TForm1.Button1Click(Sender: TObject);

var

  i: integer;

begin

  ListBox1.Clear;

  with TRegistry.Create do

  try

    RootKey := HKEY_LOCAL_MACHINE;

    OpenKey('\SYSTEM\MountedDevices', False);

    GetValueNames(Listbox1.Items);

    for i := 0 to ListBox1.Items.Count - 1 do

      if Copy(ListBox1.Items[i], 1, 12) = '\DosDevices\' then

        ListBox2.Items.Add(Copy(ListBox1.Items[i], 13, 2));

    CloseKey;

  finally

    Free;

  end;

end;


Là, il va pouvoir rentrer dans le maillot cet été : pas un gramme de trop, mdr


Bonne prog'


japee
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Salut,


Intéressant, toutes ces approches...


"le code n'est pas très estéthique"


Puisque tu le dis, couf...

Je me suis donc autorisé à le relooker, ce code... pas pour faire le
malin, mais on est là pour échanger et s'améliorer, pas vrai ?

Donc, après un régime minceur, ça donne :

procedure TForm1.Button1Click(Sender: TObject);

var

  i: integer;

begin

  ListBox1.Clear;

  with TRegistry.Create do

  try

    RootKey := HKEY_LOCAL_MACHINE;

    OpenKey('\SYSTEM\MountedDevices', False);

    GetValueNames(Listbox1.Items);

    for i := 0 to ListBox1.Items.Count - 1 do

      if Copy(ListBox1.Items[i], 1, 12) = '\DosDevices\' then

        ListBox2.Items.Add(Copy(ListBox1.Items[i], 13, 2));

    CloseKey;

  finally

    Free;

  end;

end;


Là, il va pouvoir rentrer dans le maillot cet été : pas un gramme de trop, mdr


Bonne prog'


japee
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
D..ddd..ddésolé p..pp..pppour le d..dd.ddd.dddouble ppppppost, lol
Messages postés
5
Date d'inscription
vendredi 4 juillet 2003
Statut
Membre
Dernière intervention
19 décembre 2006

WI c super mais si un petit programme s'ammuse a ajouter des valeurs dans
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
exemple:
\DosDevices\I:

\DosDevices\J:

\DosDevices\K:

\DosDevices\L:

\DosDevices\M:
et c lecteurs logique n'existe pas, on auras un mauvais résultat,,,
mais la solution est simple oui je sais .

MERCI et Bonne chance
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
Salut,

Si un programme fais ça , avec ma solution l'avantage tu sauras qu'au prochain REBOOT= DANGER!! .

imagine un peu sans philosopher, mais là tu as tous les lecteurs montés, c'est un outil de control.
Au passage Merci Japee, pour le régime mdr

couf