none
connexion Bluetooth RRS feed

  • Question

  • bonjour,

    j'ai la charge de faire évoluer une application sous VB6. L'une de ses évolution c'est le faite qu'elle peux utiliser le Bluetooth pour se connecter. Or sur VB6 je n'ai pas trouvé un tutoriel qui peux m'aider a faire ce genre de connexion.
    est ce que quelqu'un a un exemple de code ou un tutoriel?? 

    merci d'avance :)

    mardi 11 décembre 2012 15:35

Réponses

  • voici mon code de DLL :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using InTheHand.Net.Sockets;
    using InTheHand.Net.Bluetooth;
    using System.Windows.Forms;
    using InTheHand.Net;
    using System.Runtime.InteropServices;
     
    namespace LibrairieDeConnexionBluetoothAvecDLL
    {
     
        [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("220081A3-4B8F-4834-A47D-0531877D483E"), ComVisible(true)]
        public interface IBluetooth
        {
            bool connection();
            void initialisation();
            void detecterLesDispositifs();
            void choisirUnDispositif();
            void ajouterLesControleALaFentreDeConnexion(Form fenetreDeSelectionDuBluetooth, ListBox listeDesAdresseDesPériphérique, ListBox listeDesNomDesPériphérique, Button Connexion, Button refresh);
            void confgurerFenetreDeConnexion(Form fenetreDeSelectionDuBluetooth);
            void configurerLeBouton(Button Connexion, int marginGauche, int marginHaut, string nom, bool etat);
            void configurerLaListe(ListBox liste, int with, int height, int marginGauche, int marginHaut, bool enable);
            void seConnecter();
            void Win32AuthCallbackHandler(object sender, InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs e);
            void listeDesNomDesPériphérique_SelectedIndexChanged(object sender, EventArgs e);
            void Refresh_Click(object sender, EventArgs e);
            void Connexion_Click(object sender, EventArgs e);
        }
     
        [ClassInterface(ClassInterfaceType.None), Guid("90A2335C-0310-49C1-AF57-E9BF993647D5"), ProgId("LibrairieDeConnexionBluetoothAvecDLL.Bluetooth"), ComVisible(true)]
        public class Bluetooth : UserControl, IBluetooth
        {
            private BluetoothClient listeDePeripheriqueBluetooth;
            private BluetoothClient SerialPort;
            private BluetoothDeviceInfo optifive;
            private Guid service;
            private BluetoothDeviceInfo[] bdi;
            private BluetoothRadio radio;
            private Form fenetreDeSelectionDuBluetooth;
            private ListBox listeDesNomDesPériphériques;
            private ListBox listeDesAdresseDesPériphériques;
            private Button Connexion;
            private Button Refresh;
     
            public bool connection()
            {
                initialisation();
                detecterLesDispositifs();
                listeDesNomDesPériphériques.SelectedIndexChanged += new System.EventHandler(
                    listeDesNomDesPériphérique_SelectedIndexChanged);
                Refresh.Click += new System.EventHandler(Refresh_Click);
                Connexion.Click += new System.EventHandler(Connexion_Click);
     
                return optifive.Connected;
            }
     
            public void initialisation()
            {
                radio = BluetoothRadio.PrimaryRadio;
                if (radio != null && radio.Mode == RadioMode.PowerOff)
                {
                    BluetoothRadio.PrimaryRadio.Mode = RadioMode.Connectable;
                }
                listeDePeripheriqueBluetooth = new BluetoothClient();
                service = BluetoothService.SerialPort;
     
                fenetreDeSelectionDuBluetooth = new Form();
                confgurerFenetreDeConnexion(fenetreDeSelectionDuBluetooth);
                listeDesNomDesPériphériques = new ListBox();
                listeDesAdresseDesPériphériques = new ListBox();
                Connexion = new Button();
                Refresh = new Button();
                configurerLaListe(listeDesNomDesPériphériques, 200, 300, 5, 5, true);
                configurerLaListe(listeDesAdresseDesPériphériques, 200, 300, 220, 5, false);
                configurerLeBouton(Connexion, 220, 310, "Connexion", false);
                configurerLeBouton(Refresh, 5, 310, "Refresh", true);
                ajouterLesControleALaFentreDeConnexion(fenetreDeSelectionDuBluetooth, listeDesAdresseDesPériphériques, listeDesNomDesPériphériques, Connexion, Refresh);
                fenetreDeSelectionDuBluetooth.Show();
            }
     
            public void detecterLesDispositifs()
            {
                //this will take a while...
                Cursor.Current = Cursors.WaitCursor;
                bdi = listeDePeripheriqueBluetooth.DiscoverDevices();
                //bind the combo
                if (listeDesAdresseDesPériphériques.Items.Count>0)
                    listeDesAdresseDesPériphériques.Items.Clear();
                if(listeDesNomDesPériphériques.Items.Count>0)
                    listeDesNomDesPériphériques.Items.Clear();
                bdi.ToList().ForEach(delegate(BluetoothDeviceInfo Device)
                {
                    listeDesNomDesPériphériques.Items.Add(Device.DeviceName);
                    listeDesAdresseDesPériphériques.Items.Add(Device.DeviceAddress.ToString().Insert(10, ":").Insert(8, ":").Insert(6, ":").Insert(4, ":").Insert(2, ":"));
                });
                Cursor.Current = Cursors.Default;
     
            }
     
    
            public void choisirUnDispositif()
            {
                bdi.ToList().ForEach(delegate(BluetoothDeviceInfo device)
                {
                    if (device.DeviceName == listeDesNomDesPériphériques.SelectedItem.ToString().Replace(":", ""))
                        optifive = device;
                });
            }
     
            public void ajouterLesControleALaFentreDeConnexion(Form fenetreDeSelectionDuBluetooth, ListBox listeDesAdresseDesPériphérique, ListBox listeDesNomDesPériphérique, Button Connexion, Button refresh)
            {
                fenetreDeSelectionDuBluetooth.Controls.Add(listeDesNomDesPériphérique);
                fenetreDeSelectionDuBluetooth.Controls.Add(listeDesAdresseDesPériphérique);
                fenetreDeSelectionDuBluetooth.Controls.Add(Connexion);
                fenetreDeSelectionDuBluetooth.Controls.Add(refresh);
            }
     
            public void confgurerFenetreDeConnexion(Form fenetreDeSelectionDuBluetooth)
            {
                fenetreDeSelectionDuBluetooth.StartPosition = FormStartPosition.CenterScreen;
                fenetreDeSelectionDuBluetooth.Height = 378;
                fenetreDeSelectionDuBluetooth.Width = 445;
                fenetreDeSelectionDuBluetooth.Text = "Connexion Bluetooth";
            }
     
            public void configurerLeBouton(Button Connexion, int marginGauche, int marginHaut, string nom, bool etat)
            {
                Connexion.Left = marginGauche;
                Connexion.Top = marginHaut;
                Connexion.Width = 100;//height==23
                Connexion.Text = nom;
                Connexion.Enabled = etat;
            }
     
            public void configurerLaListe(ListBox liste, int with, int height, int marginGauche, int marginHaut, bool enable)
            {
                liste.Height = height;
                liste.Width = with;
                liste.Left = marginGauche;
                liste.Top = marginHaut;
                liste.Enabled = enable;
                if (liste == null)
                    MessageBox.Show("n'éxiste pas");
                else
                    MessageBox.Show("éxiste");
            }
     
    
            public void seConnecter()
            {
                try
                {
                    BluetoothWin32Authentication authetification = new BluetoothWin32Authentication(Win32AuthCallbackHandler);
                    SerialPort = new BluetoothClient();
                    SerialPort.Connect(new BluetoothEndPoint(optifive.DeviceAddress, service));
                }
                catch (Exception ex)
                {
                    MessageBox.Show("n'arrive pas a se connecter : " + ex.Message);
                }
                        
            }
     
    
     
    
     
            public void Win32AuthCallbackHandler(object sender, InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs e)
            {
                // Note we assume here that 'Legacy' pairing is being used,
                // and thus we only set the Pin property!
                string address = e.Device.DeviceAddress.ToString();
                Console.WriteLine("Received an authentication request from address " + address);
                //
                // compare the first 8 hex numbers, this is just a special case because in the
                // used scenario the model of the devices can be identified by the first 8 hex
                // numbers, the last 4 numbers being the device specific part.
    
                // send authentication response
                e.Pin = "0000";
     
                e.Confirm = true;
            }
     
    
            public void listeDesNomDesPériphérique_SelectedIndexChanged(object sender, EventArgs e)
            {
                choisirUnDispositif();
                listeDesAdresseDesPériphériques.SelectedIndex = listeDesNomDesPériphériques.SelectedIndex;
                Connexion.Enabled = true;
            }
     
    
            public void Refresh_Click(object sender, EventArgs e)
            {
                detecterLesDispositifs();
            }
     
    
            public void Connexion_Click(object sender, EventArgs e)
            {
                seConnecter();
            }
     
    
        }
    }

    • Marqué comme réponse ahmedmahdi mercredi 30 janvier 2013 08:27
    mercredi 30 janvier 2013 08:26
  • il ya une solution, mais ce n'est pas complètement opérationnel. Créer une dll ActiveX en suivant ces étapes avec "InTheHand.Net.Personal.dll":
    - Ouvrer VS2010 en tant qu'administrateur.
    - Creer un projet bibliothèque de classes (exmaple - MyProject).
    - Ajouter une nouvelle interface pour le projet (voir l'exemple ci-dessous).
    - Ajouter un using System.Runtime.InteropServices; au fichier
    - Ajouter la InterfaceType attributs, Guid à l'interface.
    - Vous pouvez générer un GUID en utilisant Outils-> Générer GUID(Create GUID) (option 4).
    - Ajouter une classe qui implémente cette interface.
    - Ajouter la ClassInterface attributs, Guid, ProgId à l'interface.
    - ProgId convention est {namespace} {classe}.
    Sous le dossier Propriétés dans le projet dans le fichier AssemblyInfo mis ComVisible à true.
    - Dans le menu des propriétés du projet, dans l'onglet build marque "Inscrire pour COM Interop"
    Générez le projet

    exemple:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    using System.Runtime.InteropServices;
     
    namespace Launcher
    {
     
        [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
        public interface ILauncher
        {
            void launch();
        }
     
        [ClassInterface(ClassInterfaceType.None), Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYY"), ProgId("Launcher.Launcher")]
        public class Launcher : ILauncher
        {
            private string path = null;
     
            public void launch()
            {
                Console.WriteLine("I launch scripts for a living.");
     
            }
     
        }
    }

    - et en VB6 en utilisant le COM:

    set obj = createObject("PSLauncher.PSLauncher") obj.launch()


    télécharger le "InTheHand.Net.Personal.dll" sur ce site :

    site

    Merci à Eyal du site de stackoverflow
    • Marqué comme réponse ahmedmahdi mercredi 30 janvier 2013 08:27
    • Modifié ahmedmahdi mercredi 30 janvier 2013 08:43 remerciement
    mercredi 30 janvier 2013 08:25

Toutes les réponses

  • ok merci

    j'ai du mal avec l'anglais mais je vais essayer et voir comment je pourrai faire.

    je vais laisser le statut comme tel. Quand je terminerai avec, je posterai la solution en français et je changerai le statut du post ici

    merci encore :)

    dimanche 16 décembre 2012 20:46
  • merci du conseil
    vendredi 4 janvier 2013 13:24
  • bonjour,

    j'ai rencontré un problème qui m’empêche d'avancer.

    A chaque connexion, le périphérique demande le code. Cette saisie je veux qu'elle soit automatique(transparente pour l'utilisateur), mais je n'ai pas trouvé un code qui permet de faire cela.

    Est ce que quelqu'un connais une solution a cela ou un terrain a suivre pour résoudre le problème??

    merci d'avance :)



    vendredi 4 janvier 2013 13:28
  • il ya une solution, mais ce n'est pas complètement opérationnel. Créer une dll ActiveX en suivant ces étapes avec "InTheHand.Net.Personal.dll":
    - Ouvrer VS2010 en tant qu'administrateur.
    - Creer un projet bibliothèque de classes (exmaple - MyProject).
    - Ajouter une nouvelle interface pour le projet (voir l'exemple ci-dessous).
    - Ajouter un using System.Runtime.InteropServices; au fichier
    - Ajouter la InterfaceType attributs, Guid à l'interface.
    - Vous pouvez générer un GUID en utilisant Outils-> Générer GUID(Create GUID) (option 4).
    - Ajouter une classe qui implémente cette interface.
    - Ajouter la ClassInterface attributs, Guid, ProgId à l'interface.
    - ProgId convention est {namespace} {classe}.
    Sous le dossier Propriétés dans le projet dans le fichier AssemblyInfo mis ComVisible à true.
    - Dans le menu des propriétés du projet, dans l'onglet build marque "Inscrire pour COM Interop"
    Générez le projet

    exemple:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    using System.Runtime.InteropServices;
     
    namespace Launcher
    {
     
        [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
        public interface ILauncher
        {
            void launch();
        }
     
        [ClassInterface(ClassInterfaceType.None), Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYY"), ProgId("Launcher.Launcher")]
        public class Launcher : ILauncher
        {
            private string path = null;
     
            public void launch()
            {
                Console.WriteLine("I launch scripts for a living.");
     
            }
     
        }
    }

    - et en VB6 en utilisant le COM:

    set obj = createObject("PSLauncher.PSLauncher") obj.launch()


    télécharger le "InTheHand.Net.Personal.dll" sur ce site :

    site

    Merci à Eyal du site de stackoverflow
    • Marqué comme réponse ahmedmahdi mercredi 30 janvier 2013 08:27
    • Modifié ahmedmahdi mercredi 30 janvier 2013 08:43 remerciement
    mercredi 30 janvier 2013 08:25
  • voici mon code de DLL :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using InTheHand.Net.Sockets;
    using InTheHand.Net.Bluetooth;
    using System.Windows.Forms;
    using InTheHand.Net;
    using System.Runtime.InteropServices;
     
    namespace LibrairieDeConnexionBluetoothAvecDLL
    {
     
        [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("220081A3-4B8F-4834-A47D-0531877D483E"), ComVisible(true)]
        public interface IBluetooth
        {
            bool connection();
            void initialisation();
            void detecterLesDispositifs();
            void choisirUnDispositif();
            void ajouterLesControleALaFentreDeConnexion(Form fenetreDeSelectionDuBluetooth, ListBox listeDesAdresseDesPériphérique, ListBox listeDesNomDesPériphérique, Button Connexion, Button refresh);
            void confgurerFenetreDeConnexion(Form fenetreDeSelectionDuBluetooth);
            void configurerLeBouton(Button Connexion, int marginGauche, int marginHaut, string nom, bool etat);
            void configurerLaListe(ListBox liste, int with, int height, int marginGauche, int marginHaut, bool enable);
            void seConnecter();
            void Win32AuthCallbackHandler(object sender, InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs e);
            void listeDesNomDesPériphérique_SelectedIndexChanged(object sender, EventArgs e);
            void Refresh_Click(object sender, EventArgs e);
            void Connexion_Click(object sender, EventArgs e);
        }
     
        [ClassInterface(ClassInterfaceType.None), Guid("90A2335C-0310-49C1-AF57-E9BF993647D5"), ProgId("LibrairieDeConnexionBluetoothAvecDLL.Bluetooth"), ComVisible(true)]
        public class Bluetooth : UserControl, IBluetooth
        {
            private BluetoothClient listeDePeripheriqueBluetooth;
            private BluetoothClient SerialPort;
            private BluetoothDeviceInfo optifive;
            private Guid service;
            private BluetoothDeviceInfo[] bdi;
            private BluetoothRadio radio;
            private Form fenetreDeSelectionDuBluetooth;
            private ListBox listeDesNomDesPériphériques;
            private ListBox listeDesAdresseDesPériphériques;
            private Button Connexion;
            private Button Refresh;
     
            public bool connection()
            {
                initialisation();
                detecterLesDispositifs();
                listeDesNomDesPériphériques.SelectedIndexChanged += new System.EventHandler(
                    listeDesNomDesPériphérique_SelectedIndexChanged);
                Refresh.Click += new System.EventHandler(Refresh_Click);
                Connexion.Click += new System.EventHandler(Connexion_Click);
     
                return optifive.Connected;
            }
     
            public void initialisation()
            {
                radio = BluetoothRadio.PrimaryRadio;
                if (radio != null && radio.Mode == RadioMode.PowerOff)
                {
                    BluetoothRadio.PrimaryRadio.Mode = RadioMode.Connectable;
                }
                listeDePeripheriqueBluetooth = new BluetoothClient();
                service = BluetoothService.SerialPort;
     
                fenetreDeSelectionDuBluetooth = new Form();
                confgurerFenetreDeConnexion(fenetreDeSelectionDuBluetooth);
                listeDesNomDesPériphériques = new ListBox();
                listeDesAdresseDesPériphériques = new ListBox();
                Connexion = new Button();
                Refresh = new Button();
                configurerLaListe(listeDesNomDesPériphériques, 200, 300, 5, 5, true);
                configurerLaListe(listeDesAdresseDesPériphériques, 200, 300, 220, 5, false);
                configurerLeBouton(Connexion, 220, 310, "Connexion", false);
                configurerLeBouton(Refresh, 5, 310, "Refresh", true);
                ajouterLesControleALaFentreDeConnexion(fenetreDeSelectionDuBluetooth, listeDesAdresseDesPériphériques, listeDesNomDesPériphériques, Connexion, Refresh);
                fenetreDeSelectionDuBluetooth.Show();
            }
     
            public void detecterLesDispositifs()
            {
                //this will take a while...
                Cursor.Current = Cursors.WaitCursor;
                bdi = listeDePeripheriqueBluetooth.DiscoverDevices();
                //bind the combo
                if (listeDesAdresseDesPériphériques.Items.Count>0)
                    listeDesAdresseDesPériphériques.Items.Clear();
                if(listeDesNomDesPériphériques.Items.Count>0)
                    listeDesNomDesPériphériques.Items.Clear();
                bdi.ToList().ForEach(delegate(BluetoothDeviceInfo Device)
                {
                    listeDesNomDesPériphériques.Items.Add(Device.DeviceName);
                    listeDesAdresseDesPériphériques.Items.Add(Device.DeviceAddress.ToString().Insert(10, ":").Insert(8, ":").Insert(6, ":").Insert(4, ":").Insert(2, ":"));
                });
                Cursor.Current = Cursors.Default;
     
            }
     
    
            public void choisirUnDispositif()
            {
                bdi.ToList().ForEach(delegate(BluetoothDeviceInfo device)
                {
                    if (device.DeviceName == listeDesNomDesPériphériques.SelectedItem.ToString().Replace(":", ""))
                        optifive = device;
                });
            }
     
            public void ajouterLesControleALaFentreDeConnexion(Form fenetreDeSelectionDuBluetooth, ListBox listeDesAdresseDesPériphérique, ListBox listeDesNomDesPériphérique, Button Connexion, Button refresh)
            {
                fenetreDeSelectionDuBluetooth.Controls.Add(listeDesNomDesPériphérique);
                fenetreDeSelectionDuBluetooth.Controls.Add(listeDesAdresseDesPériphérique);
                fenetreDeSelectionDuBluetooth.Controls.Add(Connexion);
                fenetreDeSelectionDuBluetooth.Controls.Add(refresh);
            }
     
            public void confgurerFenetreDeConnexion(Form fenetreDeSelectionDuBluetooth)
            {
                fenetreDeSelectionDuBluetooth.StartPosition = FormStartPosition.CenterScreen;
                fenetreDeSelectionDuBluetooth.Height = 378;
                fenetreDeSelectionDuBluetooth.Width = 445;
                fenetreDeSelectionDuBluetooth.Text = "Connexion Bluetooth";
            }
     
            public void configurerLeBouton(Button Connexion, int marginGauche, int marginHaut, string nom, bool etat)
            {
                Connexion.Left = marginGauche;
                Connexion.Top = marginHaut;
                Connexion.Width = 100;//height==23
                Connexion.Text = nom;
                Connexion.Enabled = etat;
            }
     
            public void configurerLaListe(ListBox liste, int with, int height, int marginGauche, int marginHaut, bool enable)
            {
                liste.Height = height;
                liste.Width = with;
                liste.Left = marginGauche;
                liste.Top = marginHaut;
                liste.Enabled = enable;
                if (liste == null)
                    MessageBox.Show("n'éxiste pas");
                else
                    MessageBox.Show("éxiste");
            }
     
    
            public void seConnecter()
            {
                try
                {
                    BluetoothWin32Authentication authetification = new BluetoothWin32Authentication(Win32AuthCallbackHandler);
                    SerialPort = new BluetoothClient();
                    SerialPort.Connect(new BluetoothEndPoint(optifive.DeviceAddress, service));
                }
                catch (Exception ex)
                {
                    MessageBox.Show("n'arrive pas a se connecter : " + ex.Message);
                }
                        
            }
     
    
     
    
     
            public void Win32AuthCallbackHandler(object sender, InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs e)
            {
                // Note we assume here that 'Legacy' pairing is being used,
                // and thus we only set the Pin property!
                string address = e.Device.DeviceAddress.ToString();
                Console.WriteLine("Received an authentication request from address " + address);
                //
                // compare the first 8 hex numbers, this is just a special case because in the
                // used scenario the model of the devices can be identified by the first 8 hex
                // numbers, the last 4 numbers being the device specific part.
    
                // send authentication response
                e.Pin = "0000";
     
                e.Confirm = true;
            }
     
    
            public void listeDesNomDesPériphérique_SelectedIndexChanged(object sender, EventArgs e)
            {
                choisirUnDispositif();
                listeDesAdresseDesPériphériques.SelectedIndex = listeDesNomDesPériphériques.SelectedIndex;
                Connexion.Enabled = true;
            }
     
    
            public void Refresh_Click(object sender, EventArgs e)
            {
                detecterLesDispositifs();
            }
     
    
            public void Connexion_Click(object sender, EventArgs e)
            {
                seConnecter();
            }
     
    
        }
    }

    • Marqué comme réponse ahmedmahdi mercredi 30 janvier 2013 08:27
    mercredi 30 janvier 2013 08:26
  • BluetoothWin32Authentication m_BTWinAuthenication;

     m_BTWinAuthenication = new BluetoothWin32Authentication(new EventHandler<BluetoothWin32AuthenticationEventArgs>(Win32AuthenticationCallback));

    public static void Win32AuthenticationCallback(object sender, BluetoothWin32AuthenticationEventArgs e)
            {
                BluetoothWin32AuthenticationEventArgs BTEvent = e;
                e.Confirm = true;
            }

    mardi 3 mars 2015 08:29