| |
|
|
- 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. |
|
|
| |
|
|
|
« 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". |
|
|
| |
|
|
|
|
| |
|
- Seite 2 - |
|
Paul Glatz | Hatte ich vergessen. Habe den Download jetzt hinzugefügt. |
|
|
| |
|
|
|
Erasmus.Herold | Sieht dann so aus ...
|
|
|
| |
|
|
| |
|
- 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 |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
Erasmus.Herold | ... und wieder einen Schritt weiter.
Mein Video mit ausgelesenen RFID Tags findest du hier: [...] |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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". |
|
|
| |
|
|
|
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 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. |
|
|
| |
|
|
|
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
|
|
|
| |
|
|
|
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.
|
|
|
| |
|
|