IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Scanner à main : quel évènement écouter ?


Sujet :

VB.NET

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut Scanner à main : quel évènement écouter ?
    Hello,

    Dans un futur projet, l'utilisateur devra pouvoir scanner des barcodes avec un scanner à main et l'application devra extraire certaines informations de ce dernier.
    L'utilisateur pourra aussi directement encoder les informations utiles dans les champs appropriés au clavier.

    Vu que l'utilisation du scanner émule la frappe au clavier, je demandais comment je pouvais faire en sorte de savoir que les données reçues viennent du scanner et non du clavier.

    Quelqu'un a-t-il déjà fait cela ? J'ai recherché sur le site du constructeur mais il n'y a apparemment aucun API/SDK/autre à disposition.

    Le scanner en question est de la marque Datalogic. Le modèle est Gryphon GD4130-BK.

    Je suis donc à la recherche de bonnes idées/pratiques quant au développement logiciel autour de tels appareils.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Voici un exemple de code que j'utilise, il crée un fichier avec le code barre trouver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub txt_SaisieCodeBarre_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_SaisieCodeBarre.KeyDown
            ' Détection du retour chariot à la fin du flashage du code barre
            If e.KeyCode = 13 Then
                ' on déclenche la création du fichier
                sw = New StreamWriter(strPath & "\" & Date.Now.ToString("yyyyMMddHHmmss") & "_" & Me.txt_SaisieCodeBarre.Text.ToString & ".txt")
                ' on écrit dedans
                sw.WriteLine(Me.txt_SaisieCodeBarre.Text.ToString)
                ' on le ferme
                sw.Close()
                ' on met à jour la zone de liste
                Me.lst_ListeDesSaisies.Items.Add(Me.txt_SaisieCodeBarre.Text.ToString)
                ' on met à jour la quantité
                Me.lbl_QteSaisies.Text = "Quantité : " & Me.lst_ListeDesSaisies.Items.Count
                ' on vide la zone de texte
                Me.txt_SaisieCodeBarre.Text = ""
            End If
    En fait on joue sur l'évènement KeyDown, et une douchette donne un retour chariot en fin de flashage, et là on fait ce qu'il faut.

    Philippe

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Oui d'accord mais là, tu places le curseur dans un textbox et le scanner ne fait qu'écrire dedans.

    Ca je sais faire aussi ^^.

    Ce que je cherche à savoir, c'est comment faire pour détecter le scan d'un barcode et ce, peu importe le contrôle ayant le focus.
    Mais je ne trouve rien à ce sujet... (peut-être que je cherche avec les mauvais mots-clefs)

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Un hook sur le clavier et stocker les x derniers caractères dans une variable ?

    EDIT : J'ai peut-être trouvé une piste avec l'api RAWINPUT.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    tu mets keypreview à true sur le formulaire, et tu gères l'event previewkeydown (cet event est un preview, l'event keydown sera quand même levé sur le control ayant le focus (ca doit être annulable via un e.handled avec un peu de chance))

    celui ci est donc levé sur le form, peut importe qui a le focus

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Oui j'y ai pensé mais j'ai un vague qu'il y a quelques temps j'avais voulu détecter la pression d'une touche au clavier peu importe qui a le focus et le preview sur le form ne faisait pas le taff pour tous les contrôles.

    Sinon, je viens de lire sur le net qu'il faut en fait installer un driver pour le scanner qui, plutôt que d'émuler le clavier, émule un port COM et y a plus qu'à lire les données qui viennent de ce port.

    Par contre, je n'ai encore jamais fait ça donc c'est encore une aventure

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    c'est beaucoup moins galère en com ou en tcp qu'en émulation clavier

  8. #8
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Possible mais faut encore que j'arrive à lire les données.

    Pour le moment, je fais chou-blanc .

    Le truc c'est que je cherche encore à savoir si c'est le scanner qui est mal configuré où si c'est mon code qui est mauvais lol...

    J'utilise la classe SerialPort et je m'abonne à l'event DataReceived dans le load de la form mais quand je scanne un truc, ça ne passe jamais dans l'event XD.

  9. #9
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Yeah ! J'arrive enfin à afficher les données scannées (et ce peu importe qui a le focus).

    Mon problème venait qu'il faut savoir quel est le nom du port qu'il faut écouter...

    Ici, j'ai fait un scan pour connaître tous les ports com de mon ordi (y avait COM1, COM3 et COM4). J'ai ensuite utilisé serialport sur chaque et j'ai constaté que c'était le COM4 le bon.

    En pratique, comment savoir ? Pour l'utilisateur, ça doit fonctionner peu importe le port usb sur lequel il va brancher le scanner...

  10. #10
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut comment détecter le bon port ?
    Hello,

    J'ai vu qu'il y a une propriété Handshake que je dois pouvoir utiliser...

    Dans le soft de configuration du scanner, il y a "Handshaking Control : RTS" où j'imagine que RTS signifie "Request To Send".

    Par contre, comment procédé à cette poignée de main programmatiquement ? Et que faire si un autre device utilise aussi RTS et que c'est lui qui me répond ? Je n'écouterai pas le bon port du coup

    Des idées ?

  11. #11
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Finalement, je me suis tourné vers WMI pour trouvé les périphériques avec "barcode scanner" dans leur nom.

    Ensuite, vu que le nom du port com est dans le nom aussi, un simple substring me donne le bon port et voilà !

    Un peu de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        Private Function SearchBarcodeScanner() As String
            Try
                Dim searcher As New ManagementObjectSearcher("\\.\ROOT\cimv2","SELECT * FROM Win32_PnPEntity WHERE Name like 'Barcode scanner%'")
     
                For Each queryObj As ManagementObject In searcher.Get()
                    dim name as String = queryObj("Name")
     
                    return(name.Substring(name.IndexOf("("c)+1,4))
                Next
                return ""  
            Catch err As ManagementException
                MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
                return ""
            End Try
        End Function
    C'est du quick&dirty. Y a sûrement moyen de faire bien plus propre !

Discussions similaires

  1. [Fermeture de fenêtre]Quel évènement choisir?
    Par 1tox dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/05/2007, 09h22
  2. Quel événement pour clic sur un sous-form ?
    Par AndréPe dans le forum IHM
    Réponses: 10
    Dernier message: 19/03/2007, 17h11
  3. [MFC] Quel évènement sur un Kill?
    Par Xno dans le forum MFC
    Réponses: 2
    Dernier message: 16/08/2006, 00h10
  4. Quel événement est déclenché quand on passe d'un enregist...
    Par pyxosledisciple dans le forum Access
    Réponses: 1
    Dernier message: 21/01/2006, 10h40
  5. Quel évènement sur le redimensionnement ?
    Par Yoh dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 01/07/2004, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo