Deutsch
Forum

USB auslesen ...

 
- Seite 1 -



Erasmus.Herold
Hallo liebe Community.

Möchte es mit diesem Thema noch einmal ganz anders versuchen, zu Hilfe zu kommen. Die COM Schnittstelle am PC auszulesen ist mit XProfan simpel.

Wie sieht es aus mit der USB Schnittstelle?
Hat jemand sich daran versucht und hat Codeschnipsel für mich?

Bitte keine Diskussion um Treiber, Windowshoheiten oder USB2COM Adapter, sondern zu diesem Thread bitte nur den Austausch, ob jemand mit XProfan USB direkt auslesen kann.

Danke euch.
 
vor 18 Tagen  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Seite 3 -



Paul
Glatz

Die "1995378067" in hScanner& ist ein Handle auf das Gerät und wird sich zwischen Programm- oder Computerneustarts ändern.
Der Gerätename (\\?\HID#VID_????&PID_????...) sollte konstant bleiben.

Mir ist keine Möglichkeit bekannt den Wert anzuzeigen. Aber die VID/PID sieht man auch im Geräte-Manager unter "Hardware-IDs".
 
vor 16 Tagen  
 



 
- Seite 2 -



Paul
Glatz
Hatte ich vergessen. Habe den Download jetzt hinzugefügt.
 
vor 16 Tagen  
 




Erasmus.Herold
Sieht dann so aus ...

 
vor 16 Tagen  
 



 
- Seite 3 -



Erasmus.Herold
Hinweis:

Derzeit ist es so, egal, ob ich oben kein (!) USB Device auswähle, ob ich die Tastatur wähle, oder den USB Scanner ....

... wenn ich über Tastatur eine Eingabe mache, erscheint der ASCII Code ohne dass der Cursor blinken muss.

Die Erfassung ist also gut (weil blind), aber es wird noch nicht auf ein festes USB Device fixiert.

Gruß und Dank
 
vor 16 Tagen  
 




Paul
Glatz
Die RawInput Meldungen habe ich vor dem Filtern ausgegeben.

Hier nochmal eine neue Version, die bei meinen Tests zuverlässiger auf den Scanner reagiert.

Herunterladen

Hier noch ein Video, wie es funktionieren soll: Herunterladen

Die neue Version zeigt RawInput Meldungen nur noch für das gewählte Gerät.

4 kB
Hochgeladen: vor 16 Tagen
Ladeanzahl5
Herunterladen
7.482 kB
Hochgeladen: vor 16 Tagen
Ladeanzahl7
Herunterladen
 
vor 16 Tagen  
 




Erasmus.Herold
Mit Video? Ganz großes Kino!!!

Mein Ergebnis:
Ich wähle nun meinen USB Scanner.
Mache eine Eingabe.
Nach dem "Enter" des Scanners kommen die Daten.
Zuletzt der gesamte String.

Das sieht schon mal sehr gut aus.
Als nächstes teste ich das mal mit einem USB (HID) RFID-Reader.

Nächste Rückmeldung folgt.
 
vor 16 Tagen  
 




Erasmus.Herold
... und wieder einen Schritt weiter.

Mein Video mit ausgelesenen RFID Tags findest du hier: [...] 
 
vor 16 Tagen  
 




Erasmus.Herold
Ich bastle an deinem Code rum und minimiere mir mal, was ich brauche.
Das Ergebnis gibt es dann später zurück.

hScanner& nimmt bei mir für den angeschlossenen USB Scanner den
Wert 1995378067 an. Darüber kann ich das Gerät fix auslesen.

Kann ich diesem Wert auch unabhängig von XProfan für die Zuweisung
unter Windows finden oder erkennen?

Ziel wäre eine feste Vorgabe des USB Ports und nicht die Auswahl aller
 
vor 16 Tagen  
 




Paul
Glatz

Die "1995378067" in hScanner& ist ein Handle auf das Gerät und wird sich zwischen Programm- oder Computerneustarts ändern.
Der Gerätename (\\?\HID#VID_????&PID_????...) sollte konstant bleiben.

Mir ist keine Möglichkeit bekannt den Wert anzuzeigen. Aber die VID/PID sieht man auch im Geräte-Manager unter "Hardware-IDs".
 
vor 16 Tagen  
 




H.Brill
wow, sieht ja schon mal gut aus.
Vielleicht mal in der Registry Ausschau halten : [...] 
 
Benutze XPROFAN X3 + FREEPROFAN
vor 16 Tagen  
 




Erasmus.Herold
Prima.

1. Dann werde ich den Scanner morgen mal über seinen fest definierten Gerätenamen packen ...

2. ... und die EANs in einer Listbox sammeln.

Meine Rückmeldung wird folgen.

Danke Euch.
 
vor 16 Tagen  
 




Erasmus.Herold
Anbei nun mal mein angepasster Test-Quellcode mit fest vorgegebenem USB Anschluss. Das Auslesen via Barcode-Scanner und RFID Reader (siehe Video weiter oben) funktioniert super.

In der nächsten Stufe folgt nun die Implementierung ins "RFID Management Studio". Weitere Rückmeldung wird folgen. Danke !!!
WindowTitle "RawInput"
Window 1000, 600
SubClass %HWnd, 1
'=======================================================================================================================================================
'=== VARIABLEN DEKLARIEREN =============================================================================================================================
'=======================================================================================================================================================
Struct RAWINPUTDEVICE = usUsagePage%, usUsage%, dwFlags&, hwndTarget&
Struct RAWINPUTKEYBOARD = dwType&, dwSize&, hDevice&, wParam&, MakeCode%, Flags%, Reserved%, VKey%, Message&, ExtraInformation&
Def RegisterRawInputDevices(3) !"User32", "RegisterRawInputDevices"
Def GetRawInputData(5) !"User32", "GetRawInputData"
Def GetRawInputDeviceList(3) !"User32", "GetRawInputDeviceList"
Def GetRawInputDeviceInfoA(4) !"User32", "GetRawInputDeviceInfoA"
Declare hScanner&, CodeStatus%, CodeFocus&, hDev&
Declare HID_Geraet_Nr&, HID_Geraet_temporaere_ID&, counter&
// RawInput registrieren
Declare rid#
Dim rid#, RAWINPUTDEVICE
rid#.usUsagePage% = 1// RegisterRawInputDevices
rid#.usUsage% = 6// Keyboard
rid#.dwFlags& = 0// $30 /* RIDEV_NOLEGACY */
rid#.hwndTarget& = %hwnd

IfNot RegisterRawInputDevices(rid#, 1, SizeOf(rid#))

    MessageBox("RawInput konnte nicht registriert werden " + Hex$(%WinError), "", 0)

EndIf

HID_Geraet_Nr& = 1
'=======================================================================================================================================================
'=== PROCEDUREN ANLEGEN ================================================================================================================================
'=======================================================================================================================================================

Proc AddDevices_USB

    Parameters hList&
    Declare numDevices&, devices#, hDevice&
    GetRawInputDeviceList(0, Addr(numDevices&), 8)

    If numDevices& = 0

        Return

    EndIf

    Dim devices#, numDevices& * 8
    GetRawInputDeviceList(devices#, Addr(numDevices&), 8)
    counter& = 1

    WhileLoop 0,numDevices& - 1

        If Long(devices#, (&Loop * 8) + 4) = 1/* RIM_TYPEKEYBOARD */

            hDevice& = Long(devices#, &Loop * 8)
            AddString(hList&, GetDeviceName_USB(hDevice&) + "|" + Str$(hDevice&))
            // ALLE USB-PORTS ANZEIGEN
            print "benutzte USB-Ports: ", GetDeviceName_USB(hDevice&) + "|" + Str$(hDevice&)

            if (counter& = HID_Geraet_Nr&)

                HID_Geraet_temporaere_ID& = hDevice&

            endif

            counter& = counter& + 1

        EndIf

        // ALLE USB-PORTS ANZEIGEN
        'print "alle USB-Ports: ", GetDeviceName_USB(hDevice&)

    EndWhile

    // GEWÄLTE TEMPORÄRE HID ID ANZEIGEN
    print : print "benutzt wird diese temporäre HID ID [" + str$(HID_Geraet_Nr&) + "]: " + str$(HID_Geraet_temporaere_ID&)

EndProc

Proc GetDeviceName_USB

    Parameters hdev&
    Declare buf#, len&
    GetRawInputDeviceInfoA(hdev&, $20000007  0, Addr(len&))/* RIDI_DEVICENAME */

    If len& = 0

        Return ""

    EndIf

    Dim buf#, len&
    GetRawInputDeviceInfoA(hdev&, $20000007  buf#, Addr(len&))/* RIDI_DEVICENAME */
    'print "hdev: ", hdev&
    'print "Add: ", GetDeviceName_USB(hDevice&)
    Return String$(buf#, 0)

EndProc

SubClassProc

    // Die Prozedur, zu der beim Subclassing alle Messages umgeleitet werden,
    // für deren Fenster bzw, Dialogelement das Subclassing eingeschaltet ist.

    If SubClassMessage(%hWnd, $00ff/* WM_INPUT */

        Declare raw#
        Dim raw#, RAWINPUTKEYBOARD
        Var size& = SizeOf(raw#)

        IfNot GetRawInputData(&sLParam, $10000003  raw#, addr(size&), 16) == -1/* RID_INPUT */

            If (raw#.hDevice& = HID_Geraet_temporaere_ID&) AND ((raw#.flags% & 1  = 0)/* RI_KEY_BREAK */

                'SetText hLog&, GetText$(hLog&) + "RawInput: Gerät: " + Str$(raw#.hDevice&) + " Taste: " + Str$(raw#.VKey%) + " Flags: " + Str$(raw#.flags%) + "\n"

                IfNot GetFocus(hCode&)

                    CodeFocus& = %GetFocus
                    SetFocus(hCode&)
                    SetText hCode&, ""

                EndIf

                If (raw#.VKey% = 13) OR (raw#.VKey% = 9)// scancode 13 = Enter  9 = Tab

                    SetMenuItem 1234

                EndIf

            EndIf

        EndIf

    EndIf

EndProc

'=======================================================================================================================================================
'=== HAUPTPROGRAMM =====================================================================================================================================
'=======================================================================================================================================================
'hDev& = Create("ChoiceBox", %hwnd, 1, 5, 25, Width(%hwnd) - 10, 300)
// USB DEVICES ERMITTELN
AddDevices_USB hDev&
Var hCode& = Create("Edit", %hwnd, "", 2000, 2000, 0, 0)// Verstecktes Textfeld für Barcodeeingabe
Var hLog& = Create("MultiEdit", %hwnd, "", 5, 120, Width(%hwnd) - 10, Height(%hwnd) - 125)
// Hauptschleife

While 1

    WaitInput

    If Clicked(hDev&)

        hScanner& = Val(SubStr$(GetText$(hDev&), 2, "|"))

    ElseIf %MenuItem = 1234

        SetFocus(CodeFocus&)
        CodeFocus& = 0
        SetText hLog&, GetText$(hLog&) + "Barcode gelesen: " + GetText$(hCode&) + "\n"

    EndIf

EndWhile

 
vor 14 Tagen  
 




Erasmus.Herold

Update:

In Anlehnung an Pauls Ideen ist nun ein USB_Port_Viewer entstanden.

Dieses Programm erkennt alle vorhandenen USB Ports in einem System, zeigt die benutzten Ports an und liefert die benötigte temporäre ID zum Auslesen im Hintergrund.

Anbei das Programm samt Quellcode.


707 kB
Hochgeladen: vor 14 Tagen
Ladeanzahl6
Herunterladen
 
vor 14 Tagen  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

293 Betrachtungen

Unbenanntvor 0 min.
Roland SchäfferGestern (09:16)
Manfred Barei vor 4 Tagen
Sascha Haak vor 4 Tagen
Walter vor 5 Tagen
Mehr...

Themeninformationen



AGB  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Impressum  |  Mart  |  Support  |  Suche

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie