begin process at 2010 02 10 17:04:41
  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 531 / 2 145

Auteur : Ayato

Ecrire un message privé
Commentaire sur cette source (5)
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 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
Source avec Zip Source avec une capture USB DETECTION par abandonware

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

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,406 sec (4)

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