Newsgroup: it.comp.appl.access
Titolo: Lettore barcode USB

Ho un lettore per la cattura dei codici a barre in formato USB.
L'HardWare funziona normalmente su una textbox: ritorna il risultato
della lettura.
Volevo sapere se è possibile gestire la lettura del codice, inviando
il risultato in un file di testo, oppure, leggere il risultato della
scansione anche se  il cursore non è posizionato su una textbox.
Grazie

 ha scritto nel messaggio 
news:2f1836fe-9e2b-4485...@z17g2000hsg.googlegroups.com...

=====================
Con alcuni viene fornito (o lo trovi sul sito produttore) un programmino di 
emulazione porta seriale
E allora quando ti metti in ascolto sulla com3 o com4 o quello che e', puoi 
decidere che cosa fare anche se non e' aperta la schermata giusta o se il 
focus non e' attualmente sul controllo giusto
A mio parere l'emulazione tastiera dei lettori barcode va bene solo per 
vedere se funziona la pistola e per usarla nei programmi che in origine non 
sono pensati per usarla, stop
Appena sposti il focus dalla textbox che avevi previsto dover accettare il 
codice, non funziona piu' niente
Mentre se hai l'ingresso sulla porta seriale potresti avviare anche un 
servizio di windows che sta in ascolto dei codici letti dalla pistola
Quando li vedi arrivare decidi tu cosa fare, l'importante e che il programma 
li possa 'beccare' subito e sempre, puoi fare partire un popup che ti 
segnala l'articolo letto oppure potresti testare se la schermata anagrafica 
articoli e' gia' avviata oppure no e in questo caso avviarla e posizionarti 
sull'articolo cercato
Ciao
RobertoA

 ha scritto nel messaggio 
news:2f1836fe-9e2b-4485...@z17g2000hsg.googlegroups.com...

Grazie
Siccome il lettore emula la tastiera devi comunque fare un hook della 
tastiera usando le api di windows.
Non è esattamente facile perchè bisogna implementare il codice che dirime 
tra "battute" provenienti dallo scanner e "battute" provenienti dalla 
tastiera...in altre parole quale sequenza di tasti è da riferirsi ad un 
barcode?
Se risolvi questo il resto è una passeggiata.
Ciao, Carlo 

 ha scritto nel messaggio 
news:2f1836fe-9e2b-4485...@z17g2000hsg.googlegroups.com...

Grazie
Mi viene un dubbio: non è che vuoi creare una specie di keylogger?
Cosa ci devi fare esattamente?
Ciao, Carlo 

 ha scritto nel messaggionews:2f1836fe-9e2b-4485...@z17g2000hsg.googlegroups.com...

Anche se ho tutte le maschere chiuse di Access, devo intercettare il
segnale di cattura del codice a barre ed elaborarlo, per poi decidere
dove inviarlo e quale maschera aprire.

 ha scritto nel messaggio 
news:7693a254-95a8-494e...@y77g2000hsy.googlegroups.com...
cut
Anche se ho tutte le maschere chiuse di Access, devo intercettare il
segnale di cattura del codice a barre ed elaborarlo, per poi decidere
dove inviarlo e quale maschera aprire.
-------------------
Prova questo e vedi se ti da uno spunto (testato in AXP e funziona):
in un modulo pubblico:
Option Compare Database
Option Explicit
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent 
As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent 
As Long) As Long
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As 
Integer
Global Cnt As Long, sSave As String, sOld As String, Ret As String
Dim Tel As Long
Function GetPressedKey() As String
    For Cnt = 32 To 128
        'Restituisce il "keystate" di uno specifico tasto
        If GetAsyncKeyState(Cnt) <> 0 Then
            GetPressedKey = Chr$(Cnt)
            Exit For
        End If
    Next Cnt
End Function
Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As 
Long, ByVal lpTimerFunc As Long)
    Ret = GetPressedKey
    If Ret <> sOld Then
        sOld = Ret
        sSave = sSave + sOld
    End If
End Sub
Ora crea una maschera vuota e su caricamento scrivi:
Private Sub Form_Load()
        SetTimer Me.hwnd, 0, 1, AddressOf TimerProc
End Sub
Poi su scaricamento scrivi:
Private Sub Form_Unload(Cancel As Integer)
     KillTimer Me.hwnd, 0
     MsgBox "Prima della chiusura sono stati premuti i seguenti tasti: " & 
sSave
End Sub
Salva il tutto e apri la maschera, a maschera aperta premi tre o quattro 
tasti sulla tastiera e poi chiudi la maschera...
Il risultato potrebbe darti qualche spunto.
Ciao, Carlo

 ha scritto nel messaggionews:7693a254-95a8-494e...@y77g2000hsy.googlegroups.com...

Potrebbe andare. Però il lettore di Codici a Barre, mi restituisce una
stringa di 32 o 13 o 64 caratteri.
In alternativa, devo passare alla porta seriale. Trovo qualcosa in
access che gestisce la seriale ?
Ciao.

 cut
Potrebbe andare. Però il lettore di Codici a Barre, mi restituisce una
stringa di 32 o 13 o 64 caratteri.
In alternativa, devo passare alla porta seriale. Trovo qualcosa in
access che gestisce la seriale ?
Ciao.
Con len(tuastringa) leggi quanti caratteri restituisce lo scanner...non è 
difficile.
Con un semplice ciclo, poi, agirai di conseguenza.
Questa soluzione, opportunamente adattata, è buona per il tuo caso.
Per quanto riguarda la gestione della seriale non ci sono problemi, il web è 
pieno di esempi, come questo:
http://www.granite.ab.ca/access/serialport.htm
Qui puoi scaricare un esempio in VB per ricevere dati su seriale da lettore 
di barcode:
http://www.it-lang-vb.net/download.asp?file=http://www.it-lang-vb.net/Archivio/Sorgenti/LaserCom.zip&ID=155
Ciao, Carlo