begin process at 2012 05 27 17:50:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > PORT COM ENUM

PORT COM ENUM


 Information sur la source

Note :
Aucune note
Catégorie :API Classé sous :port, com, rs232 Niveau :Débutant Date de création :13/11/2005 Date de mise à jour :06/04/2006 22:01:41 Vu / téléchargé :11 496 / 1 022

Auteur : BruNews

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Exemple comme promis sur forum.

ComPorts.c est prêt à l'emploi.

Source

  • #define MEMDISPO (MEM_RESERVE | MEM_COMMIT | MEM_TOP_DOWN)
  • #define QUATREKO 4096
  • /* RAPPEL USAGE DE: DWORD bnEnumPortsCom(char *pdata, DWORD lendata)
  • Remplit pdata en tableau de chaines ("COM1\0COM2\0"), 1 seul 0 final !!!
  • Retour DWORD dira combien de chaines.
  • Si lendata < 5 retournera 0 A TOUT COUP !!!
  • */
  • void __stdcall OnEnumComs(HWND hlst, int bAll)
  • {
  • char *pmem, *c;
  • DWORD r;
  • SendMessage(hlst, LB_RESETCONTENT, 0, 0);
  • pmem = (char*) VirtualAlloc(0, QUATREKO, MEMDISPO, PAGE_READWRITE);
  • if(!pmem) return;
  • if(bAll) r = bnEnumAllCom(pmem, QUATREKO);
  • else r = bnEnumPortsCom(pmem, QUATREKO);
  • if(!r) goto relMEM;
  • c = pmem;
  • do {
  • SendMessage(hlst, LB_ADDSTRING, 0, (long) c);
  • if(--r == 0) break; // ENUMERATION FINIE
  • while(*c) c++; // VA SUR ZERO FINAL DE FIN DE CHAINE
  • c++; // PASSE ZERO FINAL, VA SUR PROCHAINE CHAINE
  • } while(1);
  • relMEM: VirtualFree(pmem, 0, MEM_RELEASE);
  • }
#define MEMDISPO  (MEM_RESERVE | MEM_COMMIT | MEM_TOP_DOWN)
#define QUATREKO  4096

/*  RAPPEL USAGE DE: DWORD bnEnumPortsCom(char *pdata, DWORD lendata)
  Remplit pdata en tableau de chaines ("COM1\0COM2\0"), 1 seul 0 final !!!
  Retour DWORD dira combien de chaines.
  Si lendata < 5 retournera 0 A TOUT COUP !!!
*/
void __stdcall OnEnumComs(HWND hlst, int bAll)
{
  char *pmem, *c;
  DWORD r;
  SendMessage(hlst, LB_RESETCONTENT, 0, 0);
  
  pmem = (char*) VirtualAlloc(0, QUATREKO, MEMDISPO, PAGE_READWRITE);
  if(!pmem) return;
  if(bAll) r = bnEnumAllCom(pmem, QUATREKO);
  else r = bnEnumPortsCom(pmem, QUATREKO);
  
  if(!r) goto relMEM;
  c = pmem;
  do {
    SendMessage(hlst, LB_ADDSTRING, 0, (long) c);
    if(--r == 0) break; // ENUMERATION FINIE
    while(*c) c++;      // VA SUR ZERO FINAL DE FIN DE CHAINE
    c++;                // PASSE ZERO FINAL, VA SUR PROCHAINE CHAINE
  } while(1);
  
relMEM: VirtualFree(pmem, 0, MEM_RELEASE);
}


 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

13 novembre 2005 21:23:30 :
Ajout de la func qui liste depuis la BDR avec les USB (et autres ?) qui sont mappés en COM comme sur les portables.
06 avril 2006 22:01:42 :
Commentaire.

 Sources du même auteur

Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64)
Source avec Zip Source avec une capture FIND TEXT (WIN64)
Source avec Zip DELETE DIRECTORY (WIN64)
Source avec Zip ENUM DIRECTORY (WIN64)
Source avec Zip TEMPLATES C/C++ POUR VS 2010

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

 Sources en rapport avec celle ci

Source avec Zip GESTION DU PORT SÉRIE AVEC SURVEILLANCE DES PAQUETS POUR QT par samoura969
Source avec Zip CLASS DE DIALOGUE RS485 / RS232 SOUS LINUX par Astalavista
Source avec Zip CLASSE DE CONTRÔLE DES PORTS COM par gergalp
Source avec Zip PORT COM (RS232) SUPER SIMPLE DANS UNE CLASSE par misterzinzin
Source avec Zip UTILISATION DU PORT COM ENTRE UN PC ET UN POCKET PC par PurpleHeart2

Commentaires et avis

Commentaire de BruNews le 13/11/2005 15:15:42 administrateur CS

Renommer PortCom.ex_ en exe pour tester.
Fait sur VS 2005, suffit d'importer les fichiers en 1 seule passe dans un autre VS pour recompiler.

Commentaire de jlen100 le 13/11/2005 15:55:41

apparement l'exe ne  reconnait pas tous les ports com --> sur mon PC équipé des ports 1 à 4 il ne reconnait que les 2 premiers (com1 et com2)
@+
jlen

Commentaire de BruNews le 13/11/2005 16:09:28 administrateur CS

Il doit énumérer ceux qui sont en service et qui ont donc un matériel branché dessus.
Teste en déplaçant un matériel et tu me diras.

Commentaire de vecchio56 le 13/11/2005 16:21:05 administrateur CS

Pas du tout, pas besoin de matériel dessus chez moi.
J'ai essayé avec des port virtuels, il les reconnait aussi

Commentaire de jlen100 le 13/11/2005 16:24:24

non ça expliquerait le port 3 mais pour le port 4 j'ai actuellement une carte microcontroleur branchee dessus et il ne le reconnait pas alors que Tcomport sous DELPHI le voit de meme que le petit bout de code:RECHERCHE AUTOMATIQUE D'UN PORT SERIE... . il y a donc un p'tit quelque chose qui coince.
@+
jlen

Commentaire de BruNews le 13/11/2005 16:25:14 administrateur CS

Ben oui c'est vrai que je n'ai rien sur COM1, il est seulement déclaré.
Vais faire une sieste, m'évitera de répondre nimporte quoi.

Commentaire de BruNews le 13/11/2005 16:26:16 administrateur CS

ah alors faut que je voie cela, plus tard la sieste.

Commentaire de vecchio56 le 13/11/2005 16:29:33 administrateur CS

jlen100> Qu'est ce que tu as dans le gestionnaire de périphérique, pour le noeud Ports (COM et LPT)?
Parce que avec ton programme (que j'ai pas pu tester) je crois que j'aurai des trucs qui sont pas des ports COM pour le gestionnaire des périphériques (modem interne)

Commentaire de jlen100 le 13/11/2005 16:31:45

pour info c'est un adapteur USB -->serie et pour l sieste on verra ça sur le coup des 3 heures du mat.
@+
jlen

Commentaire de BruNews le 13/11/2005 16:33:36 administrateur CS

vi et si tu pouvais dire ce que tu as sous:
HKLM\HARDWARE\DEVICEMAP\SERIALCOMM

Commentaire de jlen100 le 13/11/2005 16:35:09

pour le noeud COM et LPT -->3 port com enonces: com1 com2 et com4 (le port com3 correspond au modem)
@+
jlen

Commentaire de jlen100 le 13/11/2005 16:35:47

j'y vai

Commentaire de jlen100 le 13/11/2005 16:41:34

\device\serial0
\device\serial1
\device\U2SPORT1 (c'est l'adaptateur)
Mtlmnt51 (modem)
c'est plus long a recopier qu'à voir!!
@+
jlen

Commentaire de jlen100 le 13/11/2005 16:46:44

voilà le bout de code que comport utilise (en DELPHI) pour enumerer les ports:
  ErrCode := RegOpenKeyEx(
    HKEY_LOCAL_MACHINE,
    'HARDWARE\DEVICEMAP\SERIALCOMM',
    0,
    KEY_READ,
    KeyHandle);

  if ErrCode <> ERROR_SUCCESS then
    raise EComPort.Create(CError_RegError, ErrCode);

  TmpPorts := TStringList.Create;
  try
    Index := 0;
    repeat
      ValueLen := 256;
      DataLen := 256;
      SetLength(ValueName, ValueLen);
      SetLength(Data, DataLen);
      ErrCode := RegEnumValue(
        KeyHandle,
        Index,
        PChar(ValueName),
{$IFDEF DELPHI_4_OR_HIGHER}
        Cardinal(ValueLen),
{$ELSE}
        ValueLen,
{$ENDIF}
        nil,
        @ValueType,
        PByte(PChar(Data)),
        @DataLen);

      if ErrCode = ERROR_SUCCESS then
      begin
        SetLength(Data, DataLen);
        TmpPorts.Add(Data);
        Inc(Index);
      end
      else
        if ErrCode <> ERROR_NO_MORE_ITEMS then
          raise EComPort.Create(CError_RegError, ErrCode);

    until (ErrCode <> ERROR_SUCCESS) ;

    TmpPorts.Sort;
si ça peut-t-être utile.
@+
jlen

Commentaire de BruNews le 13/11/2005 16:49:12 administrateur CS

chaque "\device\xxx" vaut "COMxxx" ?
parce que cet exe n'énumère que ce qui est déclaré en COMxxx, le fin de chaine qu'il faudrait pour createFile par exemple.

Commentaire de BruNews le 13/11/2005 16:51:48 administrateur CS

vi vi j'avais regardé sur delphi, c'est juste l'enum sur BDR mais si MS range ailleurs sur prochain Windows code devient obsolète. Pour cela que je préfère fonctions Setupxxx.

Commentaire de jlen100 le 13/11/2005 16:53:50

c'est vrai que mon programme (qui est une extension de comport) je lis la clef de registre qui regroupe tous les liaisons serie y compris le modem interne.
le probleme c'est que ton code ne reconnait pas l'adaptateur USB/serie et la c'est un peu plus genant (surtout que pas mal de portable n'ont plus de véritable liaison serie)
@+
jlen

Commentaire de jlen100 le 13/11/2005 16:57:12

ok pour le setup mais toutes les liaisons series ne sont pas declarées en COMxxx. Cela depend du hard surtout dans le cas d'un plug and play

Commentaire de BruNews le 13/11/2005 16:58:17 administrateur CS

Je sais mon portable n'en a plus lui aussi mais c'est 'by design' le prog fait ainsi, la demande forum était sur les "COMxxx" donc...
Faut modifier sous le label "foundPRTHS:" pour prendre les autres en compte, pas grand chose.

Commentaire de jlen100 le 13/11/2005 17:04:32

oui c'est pas grave pour l'instant je ne me remets que doucement au C++ j'ai encore le temps de trouver une solution pour ce genre de probleme pour l'instant les prog tournent pas mal en DELPHI c'est juste pour avoir une homogeneite entre les progs des cartes micro controleur et les prog windows.

Commentaire de BruNews le 13/11/2005 21:28:48 administrateur CS

Ajout de la func qui liste depuis la BDR avec les USB (et autres ?) qui sont mappés en COM comme sur les portables.
Traitement par client identique.

Commentaire de Famidoo le 17/07/2006 09:48:10

Comment fait on pour le faire marcher sous pocket pc ?

Commentaire de BruNews le 17/07/2006 10:45:40 administrateur CS

Je n'ai pas ce matériel, je ne m'y suis donc pas intéressé.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lecture d'un port serie (RS232) sous LINUX [ par DjBouch ] Je suis en BTS informatique industriel et mon projet consiste à lire les trames d'une station météo (wmr918) à travers un port série (RS232) sous Linu communication port COM [ par nmeunier ] Bonjour à tous !Je suis actuellement en stage dans une entreprise ou personne ne peut vraiment m'aider...;-(J'ai récupéré des sources en turbo C d'un programme c/c++ pour gestion port rs232 [ par dambeaufort ] Bonjour a tousJe suis actuellement en train de developper un programme sous visual c++ qui devrait me permettre de dialoguer avec un port rs232. quelq port COM, RS232 ou UART! [ par zenetcalme ] bonjour a tous,je developpe un logiciel qui communique avec le port RS232, et qui est diffusé sur un grand nombre de machine. j'arrive tres bien a com Communication Port serie RS232 [ par freddy766 ] Bonjour, J'ai un petit probleme concernant la communication RS232 (port serie) en c++. Afin de tester mon programme sur des appareils et etablir des c demande d'aide Cherche interception sur RS232 port serie [ par chemins_hermes ] Bonjour tout le monde.je cherche a pouvoir intercepter tout ce qui sort ou rentre par le port RS232 (port serie). et a le mettre dans un fichier log.c RS232 [ par th62d ] Bonjour,J'essaie de faire communiquer mon pc via le port serie RS232.....Quand je lance le programme TestCOM.c j'ai l'erreur suivante à la compilation Simulateur de communication RS232 [ par gordon13 ] Bonjour,Je dois réaliser un composant de communication avec un appareil connecté au PC via le port série. Comme j'ai pas l'appareil, je voudrais simul communication rs232 [ par sdisp ] Bonjour,J'ai fait un programme qui envoie des donn&#233;es ( trame de 12 octets ) sur un module de transmition wifi via le port com.Mon probleme est q Port com, RS232 en c [ par CHKDSK2K ] Bonjour Je recherche des tutos sur la communication avec le port com en "c" ... je n'ai pas trouv&#233; bcp d'information sur google auriez vous des s


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



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

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