Problème Liaison RS232

Signaler
Messages postés
19
Date d'inscription
mercredi 5 mars 2003
Statut
Membre
Dernière intervention
23 août 2010
-
Messages postés
19
Date d'inscription
mercredi 5 mars 2003
Statut
Membre
Dernière intervention
23 août 2010
-
Bonjour,

j'utilise un code que j'ai trouvé sur le site pour lister les ports RS232.
J'ai 4 ports com le résultat m'affiche 4 com1

code :

void SonarFrm::listeRS232()
{
        HKEY Retour;
        char * NomVal;            //variable nécessaire pour l'ouverture des clés de la base de registre
        NomVal = new char[25];
        char * Valeur;
        Valeur = new char[25];
        unsigned long NNom=25;
        unsigned long NVal=25;
        unsigned long Ty=0;
        wxString PortCom;        //stock les infos sur les ports COM
        wxString temp;
        HANDLE hSer;    //creation objet com
        int n=1; //incrementation du registre
        long Ret;//valeur de retour d'erreur

        RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", 1, KEY_READ, &Retour);

        do
        {
            //Valeur = NULL;
            Ret = RegEnumValue( Retour,n,(char *)NomVal,&NNom,0,&Ty,(unsigned char *)Valeur,&NVal );
            temp="";
            if (Ret != ERROR_NO_MORE_ITEMS)
            {
                    PortCom="";
                    //1)---> valeur : com1 , com2...
                    PortCom = Valeur;

                     temp=NomVal;
                if (temp.Find("VSerial")!=-1)
                    PortCom=PortCom+"  | Emu";
                else if (temp.Find("USB")!=-1)
                    PortCom=PortCom+"  |  USB";
                else if (temp.Find("Serial") !=-1)
                    PortCom=PortCom+"  |  RS232";
                else
                    PortCom=PortCom+"  | Inconue";
                    /*temp=Valeur; //Recupe numero de port
                temp=temp.Right(temp.Length()-3);
                PortCom =PortCom+"  | "+temp;*/
                //ouverture du port
                hSer = CreateFile(Valeur,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);

                    //vérifie que le port série est bien ouvert!
                if(hSer == INVALID_HANDLE_VALUE)
                {   // systeme ocuuper
                    PortCom=PortCom+"  | Occuper";
                }
                else
                {  // system libre
                    PortCom=PortCom+"  | Libre";

                    //c)- fermeture du port com
                    if(hSer!=NULL)
                        CloseHandle(hSer);
                }
                    portcom->Insert(PortCom,n);//ecrit dans la liste
            }
        n++;
        }while(Ret != ERROR_NO_MORE_ITEMS);
}

Merci d'avance

2 réponses

Messages postés
19
Date d'inscription
mercredi 5 mars 2003
Statut
Membre
Dernière intervention
23 août 2010

Programme minimal :

#include
#include <windows.h>
#include <string>
using namespace std;

int main()
{

    HKEY Retour;
        char * NomVal;            //variable nécessaire pour l'ouverture des clés de la base de registre
        NomVal = new char[25];
        char * Valeur = NULL;
        Valeur = new char[25];
        unsigned long NNom=25;
        unsigned long NVal=25;
        unsigned long Ty=0;
        string PortCom;        //stock les infos sur les ports COM
        string temp;
        int n=1; //incrementation du registre
        long Ret;//valeur de retour d'erreur

        RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_READ, &Retour);

        do
        {
            Ret = RegEnumValue( Retour,n,(char *)NomVal,&NNom,0,&Ty,(unsigned char *)Valeur,&NVal );
            temp="";
            if (Ret != ERROR_NO_MORE_ITEMS)
            {

                    cout<<Valeur<< " "<<n<<endl;;//ecrit dans la liste
            }
        n++;
        }while(Ret != ERROR_NO_MORE_ITEMS);

    cout << "Hello world!" << endl;
    return 0;
}

même problème
Messages postés
19
Date d'inscription
mercredi 5 mars 2003
Statut
Membre
Dernière intervention
23 août 2010

j'ai trouvé ^^