Barcodelesegerät

Hey ho

Ich hab ein Barcodelesegerät das den entschlüsselten Code als Tastenanschläge auf einer Tastatur sendet. Jetzt gibts ein Problem bei der Unterscheidung zwischen Tastatur und Lesegerät. Ich kann dem Lesegerät sagen, dass er mit vorne und hinten noch Zeichen anfügen soll.
Beispiel: im Barcode ist "abc" verschlüsselt und ich kann einstellen das er vorne * und hinten ~ dranhängt. Dann würde er als Tastenanschläge etwa folgendes senden (je nach Tastenlayout natürlich):
SHIFT
+
a
b
c
STRG
ALT
+

Da man natürlich * oder ~ auch eintippen kann, eignet sich dies auch nicht besonders gut. Ich kann aus der Asciitabelle alle Zeichen von 0x00 bis 0x7F nehmen. Jetzt ist die Frage was man als Startsymbol nimmt und was für Auswirkungen es hat diese Zeichen als Tastensignal zu senden?

Hat einer von euch ne Idee?

PS: Ich kann auch mehrere Zeichen senden als Start- und Endsymbol.
 
Wenn die Barcodes Einzeiler sind nimm CR-LF. Dadurch würde quasi jeder Code eine Zeile sein. Wenn das nicht geht nimm NUL, das ist in C-Strings ja das Terminierungsbyte und sollte anderswo nur sehr selten genutzt werden (Es sei denn die Barcodes sind numerisch. Dann kann 00 natürlich vorkommen.).
 
Naja CR-LF ist vllt eher nicht geeignet. Das ist ja unter Windows einfach nur die Eingabetaste oder?

Nullsenden würde vllt Sinn machen. Werd ich mal Probieren obs damit geht. Hab momentan auch noch ein zweites Problem. Die Barcodes die ich einlese sollen von meinem Programm per Barcodeleser oder per Bildscann verarbeitet werden. Der Bildscann liefert mir quasi die korrekte Zeichenfolge. Der Barcodeleser die Tastenanschläge, die jedoch je nach Tastenlayout des Handscanner sich unterscheiden können. Eine ganz schöne Frikellei da irgendwie ne Universallösung zu finden.
 
Ja klang für mich auch ganz logisch sowas zu nehmen. Hatte aber merkwürdige Auswirkungen, als ich ein Icon aufm dem Desktop ausgewählt hatte, kam dann ne Meldung: "Wollen sie die Datei wirklich löschen?" Voll komisch.
 
Ich habs jetzt mal mit Null probiert. Leider wird das scheinbar nicht als Tastendruck gesendet. Habs jetzt nochmal mit den ganzen anderen Steuerzeichen probiert und da wird dann immer STRG-Left + irgendein Buchstabe gesendet. Also z.B. bei 0x01 wird STRG + A gesendet. Ist vllt etwas ungünstig wenn auf einmal alles markiert wird oder so.


Zusätzlich zu den Preamble (Zeichenfolge die vor dem eigentlichen Scan mitgeschickt wird) und Postamble (Zeichenfolge die nach dem eigentlichen Scan mitgeschickt wird) noch etwas einstellen das nennt sich Terminator. Also Quasi nochmal ein Zeichen was ganz hinten mit dran kommt. (Auszuwählen sind: NONE, CR, SPACE, TAB, ESC, CTRL-C, EXEC). Standard ist dabei immer das Zeichen CR also quasi ein Zeilenumbruch. Ich kann dort auch etwas einstellen das sich EXEC nennt. Leider weiß ich nicht genau was das sein soll. Klingt ja irgendwie nach irgendwas ausführen.

Also ich geschaut hat welche Tastendrücke das EXEC verursacht kam STRG-Left + B raus. Hilft mir also nicht weiter.


Ich komm irgendwie nicht weiter. Muss doch eine gute Möglichkeit geben die Tastatur von nem Barcodeleser zu unterscheiden.

EDIT:
Ich hab gesehn man kann den Spass noch etwas tiefgreifender gestalten. Da seh ich nur nich wirklich durch. Irgendwie kann man mittels Funktion GetRawInputDeviceInfo aus der Windows-API (und ähnlichen weiteren Funktionen) ermitteln woher eine Eingabe kommt. Vllt würde das unter Umständen ein wenig weiter helfen. Ich seh nur nicht wirklich durch, wie ich diese Funktionen einsetzen muss. Kann mir da vllt jemand helfen?
 
Zuletzt bearbeitet:
in dem fall kann das mit der api sogar wirklich klappen ... bei geräten die zwischen tastatur und rechner gesteckt werden, wäre das unter umständen anders ...

die msdn doku verstehe ich erstmal so:

du kannst alle verfügbaren geräte mit GetRawInputDeviceList abfragen

mit RegisterRawInputDevices meldest du dem system von welchen geräten du daten haben willst

deine WindowProc erhält daraufhin WM_INPUT notifications wenn daten vorliegen

das eigentliche lesen dieser daten erfolgt dann mittels GetRawInputData oder GetRawInputBuffer

soweit sieht das recht überschaubar aus ...
 
Hmm ärgerlich. Ich blick da grad nich so recht durch wie ich das anzuwenden hab. Bin aber auch grad ur unkonzentiert^^

Hab das Problem vorerst so gelöst das der Scanner 4 Tasten vor dem Barcodewert und 4 Tasten danach sendet. Und zusätzlich werden nur die Zeichen eingelesen, die innerhalb einer Sekunde, zwischen den 4 Starttasten und den 4 Endtasten aufgefangen werden. Dadurch kann ich zumindest verhindern das ewiglange Eingaben vom Benutzer gemacht werden können. Könnt ja z.B. passieren das er beim normalen Rechnerbetrieb auf die 4 Starttasten kommt, dann einen Roman schreibt und dann auf die 4 Endtasten kommt. Dann würde mein Programm ja den ganzen Roman mit einlesen (oder zumindest soviel wie in einen string bei C# reinpasst).


Naja vllt bekom ich noch eine komfortablere Version hin bzw. bekom es gebacken diese WinApi-Teile ordentlich einzusetzen.

EDIT:
Mein Projekt soll übrigens auch Barcodes aus Bildern erkennen. Hab momentan eine Lösung verwendet die leider nicht 100% einwandfrei läuft und nur Codes liest die fast absolut horizontal oder vertikal auf dem Bild sind und so gut wie keine Bildfehler haben dürfen. Also bis jetzt hat es nur mit Barcodes geklappt die ich auf dem PC erstellt hab, aber nicht mit z.B. über einen Scanner gescannte Barcodes.
Also meine Frage, kennt ihr (von mir aus auch kostenpflichtige) Liberys, die ein gutes Scannergebnis liefern, selbst wenn der Barcode vllt verdreht ist oder ähnliches?
 
Zuletzt bearbeitet:
Naja "borgen" ist vllt etwas ungünstig, da ich das Programm für meine Praktikumsfirma mache und die natürlich ordentlich mit Lizenzen und Co arbeiten muss. Ausserdem muss ich für meinen Prof. n Projektbereicht schreiben. Das heißt der sollte vllt nich drin stehen was für böse Sachen ich so gemacht hab :P

Also sollte schon legal sein was ich tu^^
 
Gegen die Probleme mit den Bildfehlern würde es sich anbieten davor einen Unschärfefilter (z.B.: Gauß) auf das Bild loszulassen und danach zu binarisieren. Damit müsste der meiste Dreck verschwinden.
Wegen der Drehung könntest du davor eine Kantendetektion machen und auf Grund des Mittelwerts über die Rotation aller langen Kanten (z.B.: Mindestlänge halbe Bildhöhe) das Bild rotieren.
Damit solltest du brauchbares Material für die Weiterverarbeitung erhalten.

mfg benediktibk
 
Naja "borgen" ist vllt etwas ungünstig, da ich das Programm für meine Praktikumsfirma mache und die natürlich ordentlich mit Lizenzen und Co arbeiten muss. Ausserdem muss ich für meinen Prof. n Projektbereicht schreiben. Das heißt der sollte vllt nich drin stehen was für böse Sachen ich so gemacht hab :P

Also sollte schon legal sein was ich tu^^
Öh der ganze Androidkrempel ist Apache 2.0
http://source.android.com/source/licenses.html
 
So mal wieder ne Frage von mir :P

Bei dem Handscanner kann man ja viele Sachen einstellen. Wie z.B. Start- und Endzeichen. Weiß einer ob diese Zeichen standardisiert sind? Also kann ich mit den Codes aus dem Heft aus meinem Barcodescanner auch andere Barcodescanner einstellen?
 
Zurück
Oben