Commentçamarche.net
CodeS-SourceS
Rechercher un code, un tuto, une réponse

Port serie : détection

5/5 (7 avis)

Vue 20 876 fois - Téléchargée 2 481 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

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.