Italia
Foro

USB auslesen ...

 
- Page 1 -



Erasmus.Herold
Hallo liebe Community.

Möchte es mit diesem Thema noch einmal ganz anders versuchen, zu Aiuto 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 per 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.
 
04.05.2019  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Page 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 il valore anzuzeigen. Aber die VID/PID sieht man auch im Geräte-Manager unter "Hardware-IDs".
 
06.05.2019  
 



 
- Page 2 -



Paul
Glatz
Hatte ich vergessen. Habe den Download jetzt hinzugefügt.
 
06.05.2019  
 




Erasmus.Herold
Sieht dann so aus ...

 
06.05.2019  
 



 
- Page 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 circa 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.

Saluto und Dank
 
06.05.2019  
 




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 per das gewählte Gerät.

 
06.05.2019  
 




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.
 
06.05.2019  
 




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

Mein Video mit ausgelesenen RFID Tags findest du hier: [...] 
 
06.05.2019  
 




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 per 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 per die Zuweisung
unter Windows finden oder erkennen?

Ziel wäre eine feste Vorgabe des USB Ports und nicht die Auswahl aller
 
06.05.2019  
 




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 il valore anzuzeigen. Aber die VID/PID sieht man auch im Geräte-Manager unter "Hardware-IDs".
 
06.05.2019  
 




H.Brill
wow, sieht ja schon mal gut aus.
Vielleicht mal in der Registry Ausschau halten : [...] 
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
06.05.2019  
 




Erasmus.Herold
Prima.

1. Dann werde Io l' Scanner morgen mal circa seinen fest definierten Gerätenamen packen ...

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

Meine Rückmeldung wird folgen.

Danke Euch.
 
06.05.2019  
 




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,
    // per 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 per 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

 
08.05.2019  
 




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.


 
08.05.2019  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

19.859 Views

Untitledvor 0 min.
Member 862464120.05.2024
Sven Bader03.07.2023
H.Brill14.05.2023
Normann Strübli30.01.2023
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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