begin process at 2010 03 20 07:12:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > PORT SERIE : DÉTECTION

PORT SERIE : DÉTECTION


 Information sur la source

Note :
9,67 / 10 - par 6 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Niveau :Débutant Date de création :01/04/2005 Date de mise à jour :01/04/2005 20:12:23 Vu / téléchargé :14 858 / 2 169

Auteur : Ayato

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

  • // 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);
// 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é!

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 avril 2005 20:12:23 :

 Sources de la même categorie

Source avec Zip EDITER UN FICHIER BIT PAR BIT par riton91
Source avec Zip Source avec une capture ID3 TAG COVER ALBUM IMAGE par nanonavich
FILEREADER par FrancoisGauthier
Source avec Zip CLASSE AVANCÉE DE LOG, THREAD SAFE ET DIVERSES SURCHARGES par sboli
Source avec Zip Source avec une capture Source .NET (Dotnet) INFILESEEKER par swonder

Commentaires et avis

Commentaire de khabit844 le 05/04/2005 10:44:00

thinks my friend

Commentaire de Ayato le 21/06/2006 14:23:33

En réponse a "tomdu59"

C'est une appli graphique développez en MFC et sous VC++.Net 2003
et je n'est aucun fichier "afxwin.h" pour compiler l'appli.

De toute façon l'appli est très simple, c'est une simple lecture de la base de registre:
>> HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
Elle marche donc sous 2000 et XP , mais sous Win9x je ne sais pas si le chemin de la base de registre est le même...

Commentaire de Famidoo le 17/07/2006 10:03:59

ca fonctionne pour pocket pc ?

Commentaire de bobygus le 25/09/2007 16:55:13

C'est pile ce que je cherchais, merci!!

Commentaire de yasmin le 26/03/2009 09:22:34

thx merci exactement ce que je cherchais.
merci

Commentaire de mehdi_kh le 17/02/2010 09:54:28

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.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales