begin process at 2010 02 10 03:12:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Périphériques

 > 

Rediriger des données venant du port série sur l'entrée clavier....


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Rediriger des données venant du port série sur l'entrée clavier....

mercredi 4 mai 2005 à 11:40:30 | Rediriger des données venant du port série sur l'entrée clavier....

lecods

Bonjour,

voila mon problème.
Lorsqu'on connecte un périphérique comme un lecteur de code à barre sur l'entrée clavier, lorsqu'on lit un code à barre, les données sont affichées dans word, notepad,......Elles sont donc affichées à l'écran.
Moi, je dois connecter un lecteur de carte sur le port série (COM1 ou COM2). Je récupère donc les données lues sur le port série et j'aimerai savoir comment les redirigé sur l'entrée clavier.
En fait je veux que les données lues sur le port série s'affiche dans word, notepad....Comme si mon lecteur était connecté sur l'entrée clavier.

j'espère avoir été clair.
merci.
mercredi 4 mai 2005 à 12:01:01 | Re : Rediriger des données venant du port série sur l'entrée clavier....

jpthomasset

Salut,

Je ne vois pas trop l'interêt, mais je pense que SendInput est ce que tu cherche.
Par contre simuler des commandes claviers n'est pas terrible : Qu'est-ce qu'il va se passer si la fenetre de Notepad ou word n'as pas le focus: une autre application va recevoir les caractères.

A+,
JP.

mercredi 4 mai 2005 à 12:23:18 | Re : Rediriger des données venant du port série sur l'entrée clavier....

lecods

merci pour la réponse.
alors l'intérêt n'est pas pour moi mais pour ma boite lol.
en fait les bibliothèques utilisent des logiciels de gestion de bibliothèque utilisant des lecteurs de codes à barre connecté sur le port clavier. Donc quand un code à barre est lu, l'info s'affiche dans la fenêtre du logiciel comme s'il avait été entré au clavier.
La technologie évoluant, il est possible maintenant d'identifier les produits par des tags.
Seulement mon lecteur de tags est connecté au PC sur le port série.
Le but est donc de prendre le logiciel de gestion de bibliothèque, connecté mon lecteur sur le port série et le logiciel doit pouvoir se comporter de la meme manière que si les données venait du lecteur de code à barre connecté sur l'entrée clavier.
D'ou la solution de développer une dll par exemple qui lit les infos remonté sur le port série et les envoyé au système comme si elle venait de l'entrée clavier.

a+
vendredi 14 octobre 2005 à 11:23:36 | Re : Rediriger des données venant du port série sur l'entrée clavier....

nitrique

Bonjour, si tu as réussi à faire appel à l'api SendInput(), je veux bien un exemple STP


David, à VERSAILLES
vendredi 14 octobre 2005 à 16:07:35 | Re : Rediriger des données venant du port série sur l'entrée clavier....

lecods

Salut,
en fait j'ai finalement opté pour la fonction keybd_event
le 1er paramètre est le code virtuel associé à la touche que l'on trouve grace à la fonction VkKeyScan

Par exemple on a :

short sCar = 0;

sCar = VkKeyScan((TCHAR)(caractère));

l'octet de poids fort de sCar permet de savoir si une touche particulière comme le shift, ctrl,.... doit être enfoncé.
l'octet de poids faible contient le code virtuel de la touche

if ( (sCar & 0x0100) )
     keybd_event( VK_SHIFT, 0, 0, 0); // on simule l'appui de la touche shift

if ( (sCar & 0x0200) )
     keybd_event( VK_CONTROL, 0, 0, 0);

if ( (sCar & 0x0400) ) // VK_MENU = touche ALT
     keybd_event( VK_MENU, 0, 0, 0);

    keybd_event( (unsigned char)(sCar), 0, 0, 0); // on simule ici l'appui de la touche
    keybd_event( (unsigned char)(sCar), 0, KEYEVENTF_KEYUP, 0); // on simule ici le relachement de la touche

if ( (sCar & 0x0100) )
     keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); 

if ( (sCar & 0x0200) )
     keybd_event( VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

if ( (sCar & 0x0400) ) // VK_MENU = touche ALT
     keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0);

//pour simule un retour a la ligne
keybd_event( VK_RETURN, 0, 0, 0);
keybd_event( VK_RETURN, 0, KEYEVENTF_KEYUP, 0);

voila se code envoit à la fenêtre active un caractère suivi d'un retour à la ligne.

lundi 17 octobre 2005 à 09:37:42 | Re : Rediriger des données venant du port série sur l'entrée clavier....

nitrique

Bonjour Lecods,

Excellent ton code, il marche à merveille !

Juste un conseil final:
Comment sortir de la boucle proprement.
Je sortait de mon programme en apuyant sur une touche, mais comme on le simule, c'est foutu.
Voici mon code:
    do {
        temp = 0;
        if(ReadCOM(buffer,sizeof(buffer)-1,&nBytesRead) && nBytesRead>0) { // recevoir des données
            temp = 1;
            buffer[nBytesRead] = '\0';
            printf("\r%d octet(s) recu(s): %s",nBytesRead,buffer);
            for (i=0;i<strlen(buffer)-1;i++) { // INPUT_KEYBOARD VkKeyScan MapVirtualKey ToAscii
                sCar = VkKeyScan((TCHAR)(buffer[i]));
                if ((sCar & 0x0100)) keybd_event(VK_SHIFT,0,0,0); // Shift
                if ((sCar & 0x0200)) keybd_event(VK_CONTROL,0,0,0); // Ctrl
                if ((sCar & 0x0400)) keybd_event(VK_MENU,0,0,0); // Alt
                keybd_event((unsigned char)sCar,0,0,0); // Virtual-Key Codes
                keybd_event((unsigned char)sCar,0,KEYEVENTF_KEYUP,0);
                if ((sCar & 0x0400)) keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0); // Alt
                if ((sCar & 0x0200)) keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); // Ctrl
                if ((sCar & 0x0100)) keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); // Shift
            }
        } // */
    } while(!kbhit() || temp==0);

Mais ça ne marche pas, il faut appuyer sur une touche et repasser dans la condition pour sortir
En clair, comment nettoyer le buffer après le traitement ?



David, à VERSAILLES
mardi 18 octobre 2005 à 11:56:03 | Re : Rediriger des données venant du port série sur l'entrée clavier....

lecods

Salut,

j'ai peur de ne pas avoir bien compris.

concernant ton code.
dans ton while je rajouterai des parenthèses comme ca while (  !kbhit() || (temp==0) );

sinon je ne connaissais pas kbhit, j'ai cherché et en fait ca sert à savoir si une touche du clavier est enfoncé. Mais puisque tu simules un clavier vérifie que cette fonction te renvoit 1 lorsque tu simule l'appui d'une touche car si elle te renvoit tjrs 0 tu restes dans ton while quelque soit la valeur de temp et tu ne sors jamais.

voila j'espère avoir répondu à ta question
mardi 18 octobre 2005 à 15:23:18 | Re : Rediriger des données venant du port série sur l'entrée clavier....

nitrique

Je voulais savoir si il y avait une fonction qui nettoyait le tampon clavier une fois le traitement du for terminé histoire de sortir de cette boucle en appuyant sur une touche.


David, à VERSAILLES
mardi 18 octobre 2005 à 16:18:05 | Re : Rediriger des données venant du port série sur l'entrée clavier....

lecods

heu alors ça je sais pas.
je pense que toutes les simulations clavier ont été envoyés et traiter dans le for.
le buffer doit être vide.

par contre j'ai fait un test avec ton code et lorsque j'appui sur une touche, kbhit() ne me retourne pas 1 et donc je reste ds la boucle indéfiniement.
j'ai juste fait une boucle sans le for et le readcom.
mardi 18 octobre 2005 à 16:22:59 | Re : Rediriger des données venant du port série sur l'entrée clavier....

nitrique

Comment suggères tu de sortir de la boucle proprement alors...
As tu une autre solution, que l'appui d'une touche, aisée pour l'utilisateur ?


David, à VERSAILLES

1 2

Cette discussion est classée dans : port, données, série, clavier, entrée


Répondre à ce message

Sujets en rapport avec ce message

programmation port série/ethernet [ par zbex ] je reçois des données provenant d'un capteur sur le port série et je voudrais les envoyer sur l'interface ethernet.Je voudrais avoir si quelqu'un a un comment envoyer des données sur un port série sous xp [ par tchen01 ] je voudrais envoyer des commandes hexadecimales sur un port série en c++ sous xp et les commandes outp et inp ne sont pas valables.merci d'avance port série et // [ par pepper18 ] salut à tous je fais un petit projet en C dans lequel je réceptionne des données avec un modem rs232. j'envoie ces données avec le port// sur une cart Demande d'avis sur une idée de projet [ par beral_ ] Bonjour à tous!Je voudrais votre avis quand à la possibilité de faire ce qui suit:-Sous visual C++-Application windowsJe voudrais un programme qui fas lecture du port série avec c++ [ par moonalex ] Bonjour, je voudrais savoir comment je pourrais lire les données via un port série et afficher les données lues en format texte ou dans un tableur. j' Importer des données du port série vers Excel [ par Nicozo77100 ] Bonjour,Je souhaite récupérer des données qui arrivent sur le port série du pc et les écrire dans un fichier excel, qqun aurait il des sources permett Envoi de données hexadecimale via un port sériel (communication sérielle) [ par parrin ] Salut tout le monde,je suis entrain de programmer un logiciel pour un AS-Interface Master! Celon le constructeur pour communiquer avec le Master il fa Lire sur RS232 [ par Torhi ] Bonjour,je fais un projet et je dois lire dans le port RS232 des données envoyées par un accéléromètre.J'utilise DevC++ et j'aimerais savoir si il y a lire des données sur le port RS232 [ par Torhi ] Bonjour,je fais un projet et je dois lire dans le port RS232 des données envoyées par un accéléromètre.J'utilise DevC++ et j'aimerais savoir si il y a


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

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,468 sec (3)

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