Port serie : détection

Soyez le premier à donner votre avis sur cette source.

Vue 23 451 fois - Téléchargée 2 752 fois

Description

Voici un petit scripte qui permet de :
- Détecter tous les ports COM existant série et USB via la base de registre.
- De tester si les ports COM sont occuper.

(Fonction Supplémentaire : Detection de votre systeme electronique (dans le zip))

Source / Exemple :


// situation de la clé
	const HKEY HK=HKEY_LOCAL_MACHINE;
	// chemin d'accès aux clés 
	const char * cle="HARDWARE\\DEVICEMAP\\SERIALCOMM";

	//ouverture de la base de registre
	HKEY Retour;
	RegOpenKeyEx(HK,cle,0,KEY_ALL_ACCESS,&Retour);
	
	//définition des variables local
	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;
	CString PortCom;		//stock les infos sur les ports COM
	int n=0;				//variable d'incrémentation pour le parcoure de la base de registre
	long Ret;				// retour d'erreur de la base de registre
	CString temp;			//vatiable temporaire
	void* hSer;				// création de l'objet com

	//parcoure la partie concerner de la base de registre
	do
	{
		//ouverture d'une clé
		Ret =RegEnumValue( Retour,n,(char *)NomVal,&NNom,0,&Ty,(unsigned char *)Valeur,&NVal );
		temp="";

		//si pas d'erreur
		if (Ret != ERROR_NO_MORE_ITEMS)
		{
			PortCom="";
			//1)-- -> valeur : com1 , com2...
			PortCom =PortCom+Valeur;
			//2)-- -> type de port : com , usb
			temp=NomVal;
			if (temp.Find("Serial") !=-1)
				PortCom=PortCom+"  | COM";
			else if (temp.Find("VCP")!=-1)
				PortCom=PortCom+"  |  USB";
			else
				PortCom=PortCom+"  | Inconue";
			//3)-- ->recupere le numero du port -> 1, 2...
			temp=Valeur;
			temp=temp.Right(temp.GetLength()-3);
			PortCom =PortCom+"  | "+temp;
			//4)-- ->état du port -> libre, occuper

			//A)- ouvre le port
			hSer = CreateFile(Valeur,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
		
			//B)- 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);
			}

			//5)-- -> affichage
			UpdateData(true);
			 m_edit= m_edit+PortCom+"\r\n";
			 UpdateData(false);
		
		}
		n++;
	} while (Ret != ERROR_NO_MORE_ITEMS);

	//fermeture de la base de registre
	RegCloseKey(Retour);

Conclusion :


compilé avec Visual Studio C++ .NET
code commenté!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
jeudi 24 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012

Merci, c'est ce que je cherchais.
Messages postés
6
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
17 février 2010

Bonjour, j'ai repris ton code mais j'ai un problème en fait il ne détecte pas les ports com virtuels. comment je peut résoudre ça merci d'avance.
Messages postés
17
Date d'inscription
samedi 4 septembre 2004
Statut
Membre
Dernière intervention
23 juin 2009

thx merci exactement ce que je cherchais.
merci
Messages postés
4
Date d'inscription
mardi 9 décembre 2003
Statut
Membre
Dernière intervention
25 septembre 2007

C'est pile ce que je cherchais, merci!!
Messages postés
13
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

ca fonctionne pour pocket pc ?
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.