IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Lister les ordinateurs du reseau [FAQ]


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Homme Profil pro
    -
    Inscrit en
    Août 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Août 2003
    Messages : 75
    Points : 76
    Points
    76
    Par défaut [C#] Lister les ordinateurs du reseau
    Bonjour,


    Actuellement j'utilise un FolderBrowserDialog mais cela ne vas pas, je n'arrive pas a definir le dossier pour default favoris reseau

    Le but etant de donner la vue complete du reseau a l'utilisateur afin qu'il puisse selectionner un ordinateur et seulement un ordinateur.


    Si quelqu'un a deja fait cela



    Merci

    Alex

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Si tu vas chez Dacris (http://www.dacris.com) et que tu récupères les composants NetXP, tu pourras utiliser la classe CompBrowser qui est, justement, un explorateur d'ordinateur


    A+

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Je peux te proposer celà
    Dans un premier temps, une classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
     
    // Classe class.serverenum.cs
     
    using System;
    using System.Collections;
    using System.Runtime.InteropServices;
     
    namespace ServerEnumerator
    {
        /// <summary>
        /// The ServerEnum class is used to enumerate servers on the
        /// network.
        /// </summary>
        ///
    	public enum ResourceScope
    	{
    		RESOURCE_CONNECTED = 1,
    		RESOURCE_GLOBALNET,
    		RESOURCE_REMEMBERED,
    		RESOURCE_RECENT,
    		RESOURCE_CONTEXT
    	};
     
    	public enum ResourceType
    	{
    		RESOURCETYPE_ANY,
    		RESOURCETYPE_DISK,
    		RESOURCETYPE_PRINT,
    		RESOURCETYPE_RESERVED
    	};
     
    	public enum ResourceUsage
    	{
    		RESOURCEUSAGE_CONNECTABLE   = 0x00000001,
    		RESOURCEUSAGE_CONTAINER     = 0x00000002,
    		RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
    		RESOURCEUSAGE_SIBLING       = 0x00000008,
    		RESOURCEUSAGE_ATTACHED      = 0x00000010,
    		RESOURCEUSAGE_ALL           = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
    	};
     
    	public enum ResourceDisplayType
    	{
    		RESOURCEDISPLAYTYPE_GENERIC,
    		RESOURCEDISPLAYTYPE_DOMAIN,
    		RESOURCEDISPLAYTYPE_SERVER,
    		RESOURCEDISPLAYTYPE_SHARE,
    		RESOURCEDISPLAYTYPE_FILE,
    		RESOURCEDISPLAYTYPE_GROUP,
    		RESOURCEDISPLAYTYPE_NETWORK,
    		RESOURCEDISPLAYTYPE_ROOT,
    		RESOURCEDISPLAYTYPE_SHAREADMIN,
    		RESOURCEDISPLAYTYPE_DIRECTORY,
    		RESOURCEDISPLAYTYPE_TREE,
    		RESOURCEDISPLAYTYPE_NDSCONTAINER
    	};
     
        public class ServerEnum : IEnumerable
        {
            enum ErrorCodes
            {
                NO_ERROR = 0,
                ERROR_NO_MORE_ITEMS = 259
            };
     
            [StructLayout(LayoutKind.Sequential)]
            private class NETRESOURCE 
            {
                public ResourceScope       dwScope = 0;
                public ResourceType        dwType = 0;
                public ResourceDisplayType dwDisplayType = 0;
                public ResourceUsage       dwUsage = 0;
                public string              lpLocalName = null;
                public string              lpRemoteName = null;
                public string              lpComment = null;
                public string              lpProvider = null;
            };
     
            private ArrayList aData = new ArrayList();
     
            public int Count
            {
                get { return aData.Count; }
            }
     
            [DllImport("Mpr.dll", EntryPoint="WNetOpenEnumA", CallingConvention=CallingConvention.Winapi)]
            private static extern ErrorCodes WNetOpenEnum(ResourceScope dwScope, ResourceType dwType, ResourceUsage dwUsage, NETRESOURCE p, out IntPtr lphEnum);
     
            [DllImport("Mpr.dll", EntryPoint="WNetCloseEnum", CallingConvention=CallingConvention.Winapi)]
            private static extern ErrorCodes WNetCloseEnum(IntPtr hEnum);
     
            [DllImport("Mpr.dll", EntryPoint="WNetEnumResourceA", CallingConvention=CallingConvention.Winapi)]
            private static extern ErrorCodes WNetEnumResource(IntPtr hEnum, ref uint lpcCount, IntPtr buffer, ref uint lpBufferSize);
     
    		private	void EnumerateServers(NETRESOURCE pRsrc, ResourceScope scope, ResourceType type, ResourceUsage usage, ResourceDisplayType displayType)
    		{
    			uint		bufferSize = 16384;
    			IntPtr		buffer	= Marshal.AllocHGlobal((int) bufferSize);
    			IntPtr		handle = IntPtr.Zero;
    			ErrorCodes	result;
    			uint		cEntries = 1;
     
    			result = WNetOpenEnum(scope, type, usage, pRsrc, out handle);
     
    			if (result == ErrorCodes.NO_ERROR)
    			{
    				do
    				{
    					result = WNetEnumResource(handle, ref cEntries,	buffer,	ref	bufferSize);
     
    					if (result == ErrorCodes.NO_ERROR)
    					{
    						Marshal.PtrToStructure(buffer, pRsrc);
     
    						if (pRsrc.dwDisplayType	== displayType)
    							aData.Add(pRsrc.lpRemoteName);
     
    						if ((pRsrc.dwUsage & ResourceUsage.RESOURCEUSAGE_CONTAINER)	== ResourceUsage.RESOURCEUSAGE_CONTAINER)
    							EnumerateServers(pRsrc,	scope, type, usage,	displayType);
    					}
    					else if	(result	!= ErrorCodes.ERROR_NO_MORE_ITEMS)
    						break;
    				} while	(result	!= ErrorCodes.ERROR_NO_MORE_ITEMS);
     
    				WNetCloseEnum(handle);
    			}
     
    			Marshal.FreeHGlobal((IntPtr) buffer);
    		}
     
    		public ServerEnum(ResourceScope scope, ResourceType type, ResourceUsage usage, ResourceDisplayType displayType)
    		{
    			NETRESOURCE pRsrc = new NETRESOURCE();
     
    			EnumerateServers(pRsrc, scope, type, usage, displayType);
    		}
    		#region IEnumerable Members
     
    		public IEnumerator GetEnumerator()
    		{
    			return aData.GetEnumerator();
    		}
     
    		#endregion
    	}
    }
    ensuite elle s'utilise comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ServerEnum servers = new ServerEnum(ResourceScope.RESOURCE_GLOBALNET, ResourceType.RESOURCETYPE_DISK, ResourceUsage.RESOURCEUSAGE_ALL, ResourceDisplayType.RESOURCEDISPLAYTYPE_SERVER);
     
    foreach (string srv in servers)
    {
    	MessageBox.Show(srv);
    }
    cela va t'afficher une boite de message pour chaque ordinateur trouvé.
    attention, elle te renvoi le chemin des éléments trouvés sur le reseau, apres a toi de recupérer leur informations ! (pas tres dur)

    bidouille aussi avec les options de ServerEnum, tu pourras refaire la liste des peripheriques reseaux connectés.

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Intéressant ca

    On va le mettre dans la FAQ



  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Amélioration de la rapidité
    Bonjour. J'ai amélioré la rapidité de ce bout de code en arrêtant la récursivité dès lors que l'on est au niveau SERVEUR et en écrivant sur la console directement dès les premiers résultats. Cela modifie la méthode EnumerateServers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    private void EnumerateServers(NETRESOURCE pRsrc, ResourceScope scope, ResourceType type, ResourceUsage usage, ResourceDisplayType displayType)
            {
                uint bufferSize = 16384;
                IntPtr buffer = Marshal.AllocHGlobal((int)bufferSize);
                IntPtr handle = IntPtr.Zero;
                ErrorCodes result;
                uint cEntries = 1;
     
                result = WNetOpenEnum(scope, type, usage, pRsrc, out handle);
     
                if (result == ErrorCodes.NO_ERROR)
                {
                    do
                    {
                        result = WNetEnumResource(handle, ref cEntries, buffer, ref	bufferSize);
     
                        if (result == ErrorCodes.NO_ERROR)
                        {
                            Marshal.PtrToStructure(buffer, pRsrc);
     
                            if (pRsrc.dwDisplayType == displayType)
                                aData.Add(pRsrc.lpRemoteName);
     
                            if (pRsrc.dwDisplayType == ResourceDisplayType.RESOURCEDISPLAYTYPE_SERVER)
                                Console.WriteLine(pRsrc.lpRemoteName);
                            else
                                if ((pRsrc.dwUsage & ResourceUsage.RESOURCEUSAGE_CONTAINER) == ResourceUsage.RESOURCEUSAGE_CONTAINER)
                                    EnumerateServers(pRsrc, scope, type, usage, displayType);
                        }
                        else if (result != ErrorCodes.ERROR_NO_MORE_ITEMS)
                            break;
                    } while (result != ErrorCodes.ERROR_NO_MORE_ITEMS);
     
                    WNetCloseEnum(handle);
                }
     
                Marshal.FreeHGlobal((IntPtr)buffer);
            }
    Maintenant, les seuls "ralentissements" sont liés aux temps de réponse réseau et aux droits d'accès.

Discussions similaires

  1. Lister les ordinateurs sur le reseau
    Par takumimiraf dans le forum Langage
    Réponses: 2
    Dernier message: 12/06/2012, 14h28
  2. [Débutant] lister les ordinateurs connecter sur le reseau
    Par marouprod dans le forum VB.NET
    Réponses: 8
    Dernier message: 16/07/2011, 12h47
  3. [C#] Comment lister les ordinateurs du Reseau ?
    Par ArHacKnIdE dans le forum C#
    Réponses: 8
    Dernier message: 11/07/2006, 11h17
  4. [VB.NET] Comment lister les ordinateurs d'un réseau
    Par Jan-t dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/03/2005, 08h44
  5. [VB6] [Réseau] Lister les ordinateurs du réseau
    Par CYFL dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/12/2002, 09h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo