Listage des lecteurs logique d'un ordinateur

Résolu
xenos01 Messages postés 5 Date d'inscription vendredi 4 juillet 2003 Statut Membre Dernière intervention 19 décembre 2006 - 17 déc. 2006 à 01:47
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 - 19 déc. 2006 à 23:53
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

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
17 déc. 2006 à 15:56
Salut,

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

A +
Thierry
3
xenos01 Messages postés 5 Date d'inscription vendredi 4 juillet 2003 Statut Membre Dernière intervention 19 décembre 2006
18 déc. 2006 à 13:47
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
3
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 déc. 2006 à 16:05
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...
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 déc. 2006 à 16:07
Pardon, désolé ThWilliam...
Mais il faut 3 heures avant que mon message s'uploade... argghhh.... trop tard pour l'arrêter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
17 déc. 2006 à 22:08
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
0
Utilisateur anonyme
18 déc. 2006 à 08:40
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.
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
18 déc. 2006 à 10:30
Salut,

effectivement Franky23012301, j'ai la faculté de prendre des chars dassault,
pour démolir des maisons en pailles :-D
Tu as raison
couf
0
Utilisateur anonyme
18 déc. 2006 à 10:38
Merci pour Dassault Aviation tu viens de leur faire de la pub gratos
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
19 déc. 2006 à 19:02
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  
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 déc. 2006 à 20:42
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
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 déc. 2006 à 20:43
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
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 déc. 2006 à 20:45
D..ddd..ddésolé p..pp..pppour le d..dd.ddd.dddouble ppppppost, lol
0
xenos01 Messages postés 5 Date d'inscription vendredi 4 juillet 2003 Statut Membre Dernière intervention 19 décembre 2006
19 déc. 2006 à 23:12
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
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
19 déc. 2006 à 23:53
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
0
Rejoignez-nous