1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
procedure EnumererRessources( aRessource:pNetResource;ListItem:TStrings );
Type
TNetResources = array[0..0] of TNetResource;
pNetResources = ^TNetResources;
var
Handle : THandle;
NetResources : pNetResources;
S : String;
Size,Count,
Ret,Index : LongWord;
begin
if WNetOpenEnum( RESOURCE_GLOBALNET, //Indique l'étendue de l'énumération, ici toutes les ressources.
RESOURCETYPE_ANY,
0,
aRessource,
Handle ) = No_Error then
begin
Ret := No_Error;
Size := 50 * Sizeof( TNetResource );
GetMem( NetResources, Size );
while Ret = No_Error do
begin
Count := $FFFFFFFF; //paramètre in/out
Size := 50 * Sizeof( TNetResource ); //paramètre in/out
Ret := WNetEnumResource( Handle, Count, NetResources, Size );
if Ret <> No_Error then
Break;
for Index := 0 to Count - 1 do
begin
S:='Type d''affichage ';
case NetResources[Index].dwDisplayType of
//Type affichage, permet de déterminer
//le mode d'affichage approprié à la ressource
// Ex : RESOURCEDISPLAYTYPE_TREE peut être visualisé
// dans un TListView en mode vsReport...
RESOURCEDISPLAYTYPE_GENERIC: S :=S+'Générique';
RESOURCEDISPLAYTYPE_DOMAIN : S :=S+'Domaine';
RESOURCEDISPLAYTYPE_SERVER : S :=S+'Serveur';
RESOURCEDISPLAYTYPE_SHARE : S :=S+'Partage';
RESOURCEDISPLAYTYPE_FILE : S:=S+'Fichier';
RESOURCEDISPLAYTYPE_GROUP : S:=S+'Groupe';
RESOURCEDISPLAYTYPE_NETWORK : S:=S+'Réseau';
RESOURCEDISPLAYTYPE_ROOT : S:=S+'Racine';
RESOURCEDISPLAYTYPE_SHAREADMIN : S:=S+'Partage administrateur';
RESOURCEDISPLAYTYPE_DIRECTORY : S:=S+'Répertoire';
RESOURCEDISPLAYTYPE_TREE : S:=S+'Arbre';
RESOURCEDISPLAYTYPE_NDSCONTAINER : S:=S+'NDSCONTAINER'
else S:='inconnu';
end;
//Type de la ressource
Case NetResources[Index].dwType of
//C'est un disque partagé
RESOURCETYPE_DISK: S:=S+' [disque]';
//C'est une imprimante partagée
RESOURCETYPE_PRINT: S:=S+' [imprimante]';
// Soit disque et imprimante ou aucun des 2.
RESOURCETYPE_ANY : S:=S+' [autre]';
else S:=S+' [inconnu] ';
end;
With NetResources[Index] Do
begin
ListItem.Add(Format('%s %S',[s,lpRemoteName]));
// Le temps de traitement peut être long (parcours du réseau)
Application.ProcessMessages;
if dwUsage and ResourceUsage_Container > 0 then
Begin
ListItem.Add(' * La dernière ressource est un conteneur, appel récursif.');
EnumererRessources( @NetResources^[Index],ListItem );
end
else ListItem.Add('Vous devez vous connecter à la dernière ressource pour l''énumérer.');
end;
end;
end;
WNetCloseEnum( Handle );
FreeMem(NetResources);
end;
end;
// et on l'appele ainsi: EnumererRessources(nil,ListBox1.Items ); |
Partager