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

VB.NET Discussion :

Créer une appli réseau (un serveur + des clients)


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 22
    Par défaut Créer une appli réseau (un serveur + des clients)
    Bonjour à tous,

    Je continue à mon petit rythme le développement d'une petite application (un jeu en fait) qui devra fonctionner sur réseau.
    Une appli serveur + des applis clients.

    Comme ceux qui m'ont croisé sur le forum le savent, je suis débutant en vb.net.
    NB: mes questions précédentes sur le forum concernent un autre projet, déjà bien avancé, mais encore en développement lui-même.

    1. Ce qui a déjà été fait
    J'ai développé une version simplifiée de l'appli serveur pour me faire la main.

    Simplifiée car je me contente d'afficher des InputBox() (pour simuler les données que chaque utilisateur pourrait entrer sur son client), les remplir moi même, et vérifier que l'algo serveur traite bien ces données.
    Cela semble concluant.

    2. Ce qui reste à faire
    Rendre l'appli serveur capable de dialoguer avec des clients afin que chaque utilisateur puisse ses données/choix et les envoyer au serveur.

    Je vois pas mal de points communs avec le développement d'un tchat aussi ai-je téléchargé le code source suivant:
    https://dotnet.developpez.com/source...ernet#MiniChat

    (malheureusement le développeur de cette appli n'est plus actif sur le forum)

    Qd j'ouvre le projet de la partie serveur, l'explorateur de solutions me donne l'arborescence suivante:
    Server
    i) My project
    ii) AssemblyInfo.vb
    iii)Form1.vb

    Alors que mon jeu a l'arborescence suivante:
    MonJeu
    i)MyProject
    ii)Form1.vb
    iii)Module1.vb

    Les différences entre mon jeu et le tchat serveur que j'ai téléchargé, au niveau de MyProject seulement pour le moment:
    a. L'appli de tchat est une "Application Console", mon appli est une "Application Windows.Forms"
    Dans mon jeu, une simple console ne suffit pas, j'ai besoin que s'affichent un certain nb de résultats, donc je reste en "Application Windows.Forms".

    b. Formulaire de démarrage: aucun pour le tchat, "Form1" pour mon appli.
    Raisons identiques à a.

    c. Informations de l'assembly
    Cf pièces jointes
    Je vais limiter pour le moment mes questions à ce niveau.
    Pouvez vous m'expliquer les 3 différences majeures entre mon jeu (pour le moment sans réseau) et le tchat (afin que je puisse modifier mon jeu pour le rendre "réseau"):
    -Version de l'assembly
    -Version de fichier
    -Rendre l'assembly visible par COM
    Je suppose que ca veut dire que chaque client et serveur pourra "voir" les autres applis, et donc savoir où envoyer les données. J'ai bon ?
    Question supplémentaire: si serveur et clients sont lancés sur des ordis distants, comment l'appli serveur va-t-elle connaitre le chemin réseau / I.P des clients ?

    Une fois compris ces 3 points, je pourrai continuer mon petit bonhomme de chemin et m'attaquer (étape suivante je suppose) à la création d'un AssemblyInfo.vb.

    Merci par avance à tous, et désolé si les questions sont vraiment terre à terre pour le moment.
    Images attachées Images attachées   

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par b4ruk Voir le message
    Bonjour à tous,


    Pouvez vous m'expliquer les 3 différences majeures entre mon jeu (pour le moment sans réseau) et le tchat (afin que je puisse modifier mon jeu pour le rendre "réseau"):
    -Version de l'assembly
    -Version de fichier
    Cela n'a aucun rapport. Ces cases sont généralement remplies manuellement par le programmeur, (ou faut-il dire développeur) en fonction de l'évolution de son projet. C'est l'auteur qui décide si c'est la version 1.5. 1.4.9 ou 2

    -Rendre l'assembly visible par COM
    Je suppose que ca veut dire que chaque client et serveur pourra "voir" les autres applis, et donc savoir où envoyer les données. J'ai bon ?
    Pas vraiment. Ce COM-là n'a rien à voir avec communication. C'est pour Component Object Model, une des technologies majeures de Windows. C'est la base des ActiveX, de OLE et d'IntelliSense, entre autres. C'est cela qui permet l'intégration de la suite Office, le collage avec liaison et le pilotage à distance. Quand la case est cochée, cela permet, à certaines conditions, d'utiliser les Assemblies .net comme des ActiveX, dans VB6 et VBA

    Question supplémentaire: si serveur et clients sont lancés sur des ordis distants, comment l'appli serveur va-t-elle connaitre le chemin réseau / I.P des clients ?
    Désolé, mais je ne m'y connais pas vraiment en programmation réseau

    Merci par avance à tous, et désolé si les questions sont vraiment terre à terre pour le moment.
    De rien.

    P.S. Le numéro de version est en principe celui qui va s'afficher dans la boîte des propriétés de l'Explorateur Windows.
    P.P.S. Si ton VS est une édition Community ou supérieur, tu peux apparemment télécharger (Outils-Extensions et mises-à-jour dans VS) des extensions et leur confier le compte de tes numéros de version.

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 22
    Par défaut
    Bonsoir Clément,

    Merci pour ta réponse.
    Ok, c compris pour le numéro de version, c'est juste .... un numéro de version de l'appli ;=)
    Le fait de voir ces 1 - 0 - 0 - * m'avait fait penser à un paramétrage du type:
    1è colonne: 1= appli serveur / 0 = appli client
    2è colonne= * = visible de toutes les appli clients / 1 = visible des applis pour lesquelles on a aussi paramétré 1
    etc...
    Bref, je m'étais trompé dans l'importance du paramétrage de l'onglet 'My Project'.

    Il me reste donc, dans l'immédiat en tous cas à:
    1. Savoir si j'ai besoin de rendre visible mon assembly par COM ou pas pour mes besoins.
    2. Puis à apprendre à créer un 'AssemblyInfo.vb' puisque c'est à ce niveau que semble se jouer la communication entre le serveur et les clients.

    Merci Clément !

  4. #4
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 22
    Par défaut
    Bonjour à tous,
    j'entre dans le coeur du pb:
    dans mon appli actuelle (qui ne gère pas le réseau):
    1. Au lancement s'affiche Form1, qui contient qq dizaines de combobox
    2. Dans module1 est lancée la Sub 'ProgPrincipal'
    ProgPrincipal lit les données présentes dans les combobox et, en fonction de ce paramétrage, lance le jeu de stratégie.
    Chaque joueur joue à son tour, en entrant sa décision dans une InputBox.
    ProgPrincipal traite cette réponse, calcule les conséquences, et interroge le prochain joueur.

    (je n'arrive pas à m'inspirer du code de tchat serveur/client téléchargé sur le site car la structure est différente: c'est juste une console qui se lance, avec tout le code dant le "Form1.vb" alors que moi j'ai une sub qui fait de nombreux calculs et qui n'appelle Form1.vb que pour interroger sur les paramètres renseignés dans la form & pour la remplir avec les calculs réalisés par la sub ProgPrincipal)

    Comment remplacer cet InputBox() par un appel à une appli client, dans laquelle le joueur aurait rempli une ComboBox (ou alors l'InputBox s'affiche sur l'écran de client, c'est encore mieux) ?

    (Comme je n'ai aucune base en réseau, je ne sais même pas par où commencer en cherchant sur google, si vous pouvez me mettre le pied à l'étrier en organisant ma recherche ou en me disant sur quels concepts je dois me concentrer, ce serait très agréable !)

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 22
    Par défaut
    voici le matériel dont je dispose (appli de tchat téléchargée sur le site)

    Appli serveur: AssemblyInfo.vb
    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
    Imports System
    Imports System.Reflection
    Imports System.Runtime.InteropServices
     
    ' Les informations générales relatives à un assembly dépendent de l'ensemble 
    ' d'attributs suivant. Pour modifier les informations associées à un assembly, 
    'changez les valeurs de ces attributs.
     
    ' Vérifiez les valeurs des attributs de l'assembly
     
    <Assembly: AssemblyTitle("")> 
    <Assembly: AssemblyDescription("")> 
    <Assembly: AssemblyCompany("")> 
    <Assembly: AssemblyProduct("")> 
    <Assembly: AssemblyCopyright("")> 
    <Assembly: AssemblyTrademark("")> 
    <Assembly: CLSCompliant(True)> 
     
    'Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM
    <Assembly: Guid("B908A1D7-FE16-40F5-9A79-8A50F4B8383D")> 
     
    ' Les informations de version pour un assembly se composent des quatre valeurs suivantes*:
    '
    '      Version principale
    '      Version secondaire 
    '      Numéro de build
    '      Révision
    '
    ' Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 
    ' en utilisant '*', comme indiqué ci-dessous*:
     
    <Assembly: AssemblyVersion("1.0.*")>
    Appli serveur: Form1.vb
    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
    Imports System
    Imports System.Net.Sockets
    Imports System.Net
    Imports System.IO
    Namespace MiniChatServer
     
        Class Class1
     
            <STAThread()> _
            Shared Sub Main(ByVal args As String())
                Try
                    Dim bStatus As Boolean = True
                    Dim sMessageServer As String = ""
                    Dim sMessageClient As String = ""
                    Dim sRemoteAddress As String
                    Dim address As IPAddress = IPAddress.Parse("127.0.0.1")
                    Dim tcplistener As TcpListener = New TcpListener(address, 8100)
                    tcplistener.Start()
                    Console.WriteLine("Serveur démarré...")
                    Dim SocketpourClient As Socket = tcplistener.AcceptSocket
                    sRemoteAddress = CType(SocketpourClient.RemoteEndPoint, IPEndPoint).Address.ToString
                    Console.WriteLine("Un client vient de se connecter." & Microsoft.VisualBasic.Chr(10) & "IP du client : " & sRemoteAddress & "" & Microsoft.VisualBasic.Chr(10) & "")
                    Dim FluxReseau As NetworkStream = New NetworkStream(SocketpourClient)
                    Dim sr As StreamReader = New StreamReader(FluxReseau)
                    Dim sw As StreamWriter = New StreamWriter(FluxReseau)
                    While bStatus
                        If SocketpourClient.Connected Then
                            sMessageServer = sr.ReadLine
                            Console.WriteLine("Client : " + sMessageServer)
                            If sMessageServer = "bye" Then
                                bStatus = False
                                sr.Close()
                                sw.Close()
                                FluxReseau.Close()
                                SocketpourClient.Close()
                                Return
                            End If
                            Console.Write("Serveur : ")
                            sMessageClient = Console.ReadLine
                            sw.WriteLine(sMessageClient)
                            sw.Flush()
                        End If
                    End While
                    sr.Close()
                    sw.Close()
                    FluxReseau.Close()
                    SocketpourClient.Close()
                    Console.WriteLine("Arret du serveur")
                Catch e As Exception
                    Console.WriteLine(e.ToString)
                End Try
            End Sub
        End Class
    End Namespace
    Appli client: AssemblyInfo.vb
    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
    Imports System
    Imports System.Reflection
    Imports System.Runtime.InteropServices
     
    ' Les informations générales relatives à un assembly dépendent de l'ensemble 
    ' d'attributs suivant. Pour modifier les informations associées à un assembly, 
    'changez les valeurs de ces attributs.
     
    ' Vérifiez les valeurs des attributs de l'assembly
     
    <Assembly: AssemblyTitle("")> 
    <Assembly: AssemblyDescription("")> 
    <Assembly: AssemblyCompany("")> 
    <Assembly: AssemblyProduct("")> 
    <Assembly: AssemblyCopyright("")> 
    <Assembly: AssemblyTrademark("")> 
    <Assembly: CLSCompliant(True)> 
     
    'Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM
    <Assembly: Guid("6A0BA0C5-6D93-43FE-BAF1-13C228DC820B")> 
     
    ' Les informations de version pour un assembly se composent des quatre valeurs suivantes*:
    '
    '      Version principale
    '      Version secondaire 
    '      Numéro de build
    '      Révision
    '
    ' Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 
    ' en utilisant '*', comme indiqué ci-dessous*:
     
    <Assembly: AssemblyVersion("1.0.*")>
    Appli client: Form1.vb
    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
    Imports System
    Imports System.IO
    Imports System.Net.Sockets
    Imports System.Net
    Namespace MiniChatClient
     
        Class Class1
     
            <STAThread()> _
            Shared Sub Main(ByVal args As String())
                Dim SocketPourClient As TcpClient
                Dim bStatus As Boolean = True
                Try
                    Dim IPServer As String = "127.0.0.1"
                    SocketPourClient = New TcpClient(IPServer, 8100)
                    Console.WriteLine("Connecte au serveur." & Microsoft.VisualBasic.Chr(10) & "IP du serveur : " + IPServer + "" & Microsoft.VisualBasic.Chr(10) & "")
                Catch
                    Console.WriteLine("Connexion impossible")
                    Return
                End Try
                Dim FluxClient As NetworkStream = SocketPourClient.GetStream
                Dim sr As StreamReader = New StreamReader(FluxClient)
                Dim sw As StreamWriter = New StreamWriter(FluxClient)
                Try
                    Dim ClientMessage As String = ""
                    Dim ServerMessage As String = ""
                    While bStatus
                        Console.Write("Client : ")
                        ClientMessage = Console.ReadLine
                        If ClientMessage = "bye" Then
                            bStatus = False
                            sw.WriteLine(ClientMessage)
                            sw.Flush()
                        Else
                            sw.WriteLine(ClientMessage)
                            sw.Flush()
                            ServerMessage = sr.ReadLine
                            Console.WriteLine("Serveur : " + ServerMessage)
                        End If
                    End While
                Catch
                    Console.WriteLine("Probleme reseau !")
                End Try
                sr.Close()
                sw.Close()
                FluxClient.Close()
                SocketPourClient.Close()
            End Sub
        End Class
    End Namespace
    Remplacer 'Name MinichatClient / End Namespace' par une simple 'Private Sub ComboBox / End Sub' est-ce une voie à explorer pour faire communiquer mes deux applis, non par une console, mais par une combobox présente dans les 2 applis ?

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    lu en diagonale mais il semble qu'il y a beaucoup de confusion

    un assembly est soit un exe (programme) soit une dll (morceau de programme, non démarrable mais utilisable par un autre assembly)
    les infos de l'assembly n'ont rien à voir avec du réseau, si tu veux faire dialoguer 2 applis il va falloir mettre du code qui fait ca

    pour faire de la communication par réseau il existe plusieurs protocoles, et plusieurs classes dans le framework .net
    concernant les protocoles, le tcp/ip est le plus pratique, car les infos sont "sûres" d'arriver et dans l'ordre
    à l'inverse l'udp ne garantie pas tout ça (une trame perdue n'est pas réémise)

    concernant les classes dans le framework .net il y a des classes de bas niveau permettant d'envoyer de se connecter et d'envoyer des octets, et des choses de très haut niveau qui permettent de faire abstraction de ça
    la classe socket gère un peu tout mais elle est un poil trop complexe à mon gout
    le classe tcplistener permet de faire un server, on choisit un port et une ip locale (ou toutes les ip locales) et on demande l'attente d'une connexion
    une fois la connexion établie, le serveur et le client peuvent envoyer des octets de l'autre côté (à note qu'un string peut etre transformé en octets et réciproquement)
    si on veut rester à ce niveau là il faut alors établir un norme de dialogue, genre si un client envoi START vers le serveur alors la partie est lancé par l'émetteur, le serveur peut alors envoyer une commande aussi à tous les clients pour les prévenir
    côté client il faut utiliser tcpclient qui permet de se connecter à un tcplistener

    avec les années des choses plus simple et nécessitant moins de code sont apparues, comme les web service
    en .net c'est WCF qui s'occupe de ça
    ici on définit des méthodes/fonctions qui seront appelable à distance en gros
    et donc quand le client va faire gameservice.tellemethode(parametres) tout le dialogue réseau est encapsulé et le code côté serveur s'exécute, que ca soit la connexion tcp et la norme de dialogue
    il est aussi possible de faire du wcf bidirectionnel pour que le serveur puisse appeler des méthodes côté clients
    c'est pas forcément simple à appréhender, mais une fois qu'on a compris on peut avancer vite sans trop de code


    dans les 2 cas il faut donc que le serveur écoute sur un port et que le client sache sur quelle ip et quel port se connecter
    que ca soit sur un réseau local ou internet c'est le même principe (il peut y avoir du routage à faire par internet)
    sur un réseau local il est possible de faire un service de découverte, le client pourrait donc ne pas connaitre l'adresse et le port du serveur et le trouver tout seul (ca se code aussi, avec du broadcast udp)
    si tu dois avoir plusieurs serveurs un peu partout dans le monde, il est possible de faire un serveur avec une ip connue des clients, et les clients pourraient s'y connecter pour connaitre les adresses des serveurs actuellement connectés (qui auraient préalablement averti ce service sur quelle adresse/port ils sont joignables)


    pour faire des tests tu peux bien sur avoir le server et le client sur le même pc, et les 2 en mode debug en même temps dans la même solution si nécessaire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 22
    Par défaut
    Bonsoir pol63
    Merci pour toutes ces informations.

    Pour le moment, je dois avouer que ca ne me parle pas bcp vu mon niveau actuel sauf l'avant dernier paragraphe.
    Je crois que nos messages se sont croisés car, juste avant ta réponse, j'ai collé le code que j'ai trouvé sur ce site (code de tchat avec une appli client et une appli serveur).

    Partant de 0 à ce niveau, je pensais démarrer avec ce code et:
    -comprendre ce qu'il fait
    -l'adapter à mon appli

    Globablement, tous mes calculs sont faits dans ma sub 'ProgPrincipale' qui est située dans 'Module1.vb'.
    Elle lit des paramètres présents dans des ComboBox, interroge chaque joueur à partir d'une InputBox, fait ses calculs, et passe au prochain joueur (=lui envoie une InputBox pour connaitre ses instructions).
    ------>Je pensais m'inspirer du code du mini tchat et l'adapter comme ceci:
    i) Dans le code de l'appli de tchat, côté serveur, remplacer 'Name MinichatClient / End Namespace' par une simple 'Private Sub ComboBox / End Sub'
    Ainsi j'imagine que la ComboBox serait remplie en allant chercher dans l'appli client ce que le joueur a entré comme instruction dans son appli client (en remplissant une input box)
    Cette optique te semble-t-elle viable Pol63 ?

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    il va pourtant falloir comprendre car ce que tu veux faire est surement beaucoup plus compliqué qu'afficher un string envoyé par réseau
    le code que tu as comme exemple utilise tcplistener et tcpclient
    le client se connecte au serveur, et envoi juste du texte que l'autre côté affiche

    il n'y a qu'une fonction donc c'est simple, mais toi si tu veux plusieurs fonctionnalités par le réseau ca va forcément compliquer le code, et ton exemple ne montre pas ca
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 22
    Par défaut
    Bonjour Pol,
    J'ai fait qq essais/modifications sur cette appli de tchat pour échanger des informations (optique d'un jeu) entre les deux.
    Avec le tcp listener/client, pourrais je gérer plusieurs clients (=envoyer des messages différents à chaque client)?
    Si c le cas, alros c déjà une bonne base pour moi: créer une appli basique tout en progressant dans mon apprentissage.

Discussions similaires

  1. Vérifier une connexion réseau à un serveur SQL
    Par manudja dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/08/2020, 21h09
  2. Réponses: 5
    Dernier message: 27/11/2015, 10h32
  3. Réponses: 0
    Dernier message: 21/11/2010, 20h06
  4. Réponses: 10
    Dernier message: 02/11/2005, 11h12
  5. Enlever une appli de la barre des taches Windows
    Par Slucky dans le forum Windows
    Réponses: 2
    Dernier message: 25/09/2005, 15h29

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