Ho uno scanner di codici a barre (che funziona come una tastiera) e ovviamente ho una tastiera troppo agganciata a un computer. Il software accetta input sia dallo scanner che dalla tastiera. Devo accettare solo l'input dello scanner. Il codice è scritto in C#. C'è un modo per "disabilitare" l'input dalla tastiera e accettare solo input dallo scanner?Come distinguere tra più dispositivi di input in C#
Nota: La tastiera fa parte di un laptop ... quindi non può essere scollegata. Inoltre, ho provato a inserire il seguente codice override Boolean ProcessDialogKey (System.Windows.Forms.Keys keyData) { return true; } Ma poi ignorando le sequenze di tasti dalla tastiera, anche l'ingresso del lettore di codici a barre viene ignorato.
Non è possibile che lo scanner invii caratteri tipografici, poiché lo scanner viene utilizzato da altre applicazioni e l'aggiunta di un flusso di caratteri sentinella significherebbe la modifica di altro codice.
Inoltre, non è possibile utilizzare il metodo di temporizzazione per determinare se l'input proviene da uno scanner di codici a barre (se è un gruppo di caratteri seguito da una pausa) poiché i codici a barre scansionati potrebbero potenzialmente essere codici a barre a carattere singolo.
Sì, sto leggendo i dati da un flusso.
Sto cercando di seguire l'articolo: Distinguere gli scanner di codici a barre dalla tastiera in WinForms. Tuttavia ho le seguenti domande:
- Ottengo un errore NativeMethods è inaccessibile a causa del suo livello di protezione. Sembra come se avessi bisogno di importare una DLL; è corretto? Se sì, come lo faccio?
- Quale definizione di override protetto WndProc (ref Message m) dovrei usare, ci sono due implementazioni nell'articolo?
- Mi viene restituito un errore relativo a [SecurityPermission (SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] errore CS0246: Impossibile trovare il nome del tipo o spazio dei nomi 'SecurityPermission' (manca una direttiva using o un riferimento assembly?). Come posso risolvere questo errore?
- C'è anche un errore sulla riga che contiene: if ((da hardwareId in hardwareId dove deviceName.Contains (hardwareId) seleziona hardwareId) .Count()> 0) Errore è errore CS1026:) previsto.
- Devo inserire tutto il codice nell'articolo in un file .cs denominato BarcodeScannerListener.cs?
domande Followup su C# codice sorgente soluzione postato da Nicholas Piasecki su http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/:
- non ero in grado di aprire la soluzione in VS 2005, così ho scaricato Visual C# 2008 Express Edition, e il codice corse. Tuttavia, dopo aver collegato il mio lettore di codici a barre e scansionato un codice a barre, il programma non ha riconosciuto la scansione. Ho inserito un punto di interruzione nel metodo OnBarcodeScanned ma non è mai stato colpito. Ho modificato App.config con l'ID del mio scanner di codici a barre ottenuto utilizzando Device Manager. Sembra esserci 2 nomi dispositivo con HID # Vid_0536 & Pid_01c1 (che viene ottenuto da Gestione periferiche quando lo scanner è collegato). Non so se questo sta facendo sì che la scansione non funzioni. Durante l'iterazione su deviceNames, ecco l'elenco dei dispositivi che ho trovato (utilizzando il debugger):
"\ ??\ HID # Vid_0536 & Pid_01c1 & MI_01 # 9 & 25ca5370 0000 # {4d1e55b2-f16f-11cf-88cb-001.111.000,03 mila} "
" \ ?? \ HID # Vid_0536 & Pid_01c1 & MI_00 # 9 & 38e10b9 0000 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd} "
" \ ?? \ HID # Vid_413c & Pid_2101 & MI_00 # 8 & 1966e83d 0000 # {884b96c3-56ef-11d1-bc8c- 00a0c914 05dd} "
"\ ?? \ HID # Vid_413c & Pid_3012 # 7 & 960fae0 0000 # {378de44c-56ef-11d1-bc8c-00a0c91405dd}"
" \ ?? \ Root # RDP_KBD # 0000 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd} " "\ ?? \ ACPI # PNP0303 # 4 & 2f94427b & 0 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd}" " \ ?? \ Root # RDP_MOU # 0000 # {378de44c-56ef-11d1-bc8c-00a0c91405dd}" "\ ?? \ ACPI # PNP0F13 # 4 & 2f94427b & 0 # {378de44c-56ef-11d1-bc8c-00a0c91405dd}"
Quindi ci sono 2 voci per HID # Vid_0536 & Pid_01c1; potrebbe essere che la scansione non funzioni?
OK, così sembra che ho dovuto capire un modo per non dipendere dal carattere ASCII 0x04 inviato dallo scanner ... poiché il mio scanner non invia quel carattere. Dopodiché, viene attivato l'evento scannerizzato con codice a barre e viene visualizzato il popup con il codice a barre. Quindi grazie Nicholas per il tuo aiuto.
Scollegare la tastiera. – TheTXI
Ho aggiunto un codice di esempio in fondo alla fine dell'articolo. In bocca al lupo! –
@NicholasPiasecki sono passati 6 anni, ma ancora - perché HTTP 410? – itsho