Ik ben hier in het bezit van een barcode pen scan (Champ BS3215 voor de geïnteresseerde). Deze scanner is via USB aangesloten en gedraagt zich verder als een keyboard. Zover alles prima. Als ik een barcode scan in bijvoorbeeld notepad verschijnt deze netjes in beeld.
Nu is het de bedoeling dat er een applicatie op de achtergrond komt te draaien welke zodra er een barcode gescand wordt een aantal acties onderneemt. Het moet dus niet uit maken welk programma er op dat moment actief is. Zodra er een barcode gescand wordt moet dit door deze applicatie worden opgevangen.
Het probleem
Het scannen van een barcode is een klein onderdeel van een veel grotere applicatie. Tijdens het wachten op het leveren van de barcode scanner heb ik een keylogger in de applicatie ingebouwd welke alle toetsaanslagen registreerde. Zo kon ik mbv. 13 getallen intikken het scannen van een barcode simuleren. Mij verwachting was dat deze techniek ook zou moeten werken bij een daadwerkelijke barcode scanner. Dit werkt echter niet. Ik krijg meestal maar de helft van alle gescande getallen binnen of juist veelte veel getallen, en vaak ook gewoon helemaal niks. Terwijl ik in notepad keurig 13 cijfers in beeld krijg. Het lijkt wel of de GetAsyncKeyState() functie te traag is om alle cijfers af te vangen. Het omlaag zetten van de BAUD Rate (snelheid waarmee er over de lijn verstuurd wordt) en het toevoegen van een timeout tussen het sturen van de getallen geeft echter geen ander resultaat.
Het afvangen van de toetsaanslagen doe ik op de volgende manier:
Deze code werkt prima met toetsen die ik op mijn muis indruk en/of toetsenbord. Met de barcode scanner dus alleen niet. Ook het proberen om de thread even te laten slapen alvorens deze opnieuw de aanslagen te laten checken, alsmede het implementeren van een timer die na een vast interval alle toetsaanslagen ophaalde werken niet naar behoren.
Doe ik iets structureels fout? Of is de GetAsyncKeyState() functie niet bedoeld voor mijn toepassing. Zo ja is er een andere manier waarmee ik toetsaanslagen kan afvangen?
Nu is het de bedoeling dat er een applicatie op de achtergrond komt te draaien welke zodra er een barcode gescand wordt een aantal acties onderneemt. Het moet dus niet uit maken welk programma er op dat moment actief is. Zodra er een barcode gescand wordt moet dit door deze applicatie worden opgevangen.
Het probleem
Het scannen van een barcode is een klein onderdeel van een veel grotere applicatie. Tijdens het wachten op het leveren van de barcode scanner heb ik een keylogger in de applicatie ingebouwd welke alle toetsaanslagen registreerde. Zo kon ik mbv. 13 getallen intikken het scannen van een barcode simuleren. Mij verwachting was dat deze techniek ook zou moeten werken bij een daadwerkelijke barcode scanner. Dit werkt echter niet. Ik krijg meestal maar de helft van alle gescande getallen binnen of juist veelte veel getallen, en vaak ook gewoon helemaal niks. Terwijl ik in notepad keurig 13 cijfers in beeld krijg. Het lijkt wel of de GetAsyncKeyState() functie te traag is om alle cijfers af te vangen. Het omlaag zetten van de BAUD Rate (snelheid waarmee er over de lijn verstuurd wordt) en het toevoegen van een timeout tussen het sturen van de getallen geeft echter geen ander resultaat.
Het afvangen van de toetsaanslagen doe ik op de volgende manier:
C#:
1
2
3
4
5
6
7
8
9
10
11
| while (run) { foreach (int i in Enum.GetValues(typeof(Keys))) { if (GetAsyncKeyState(i) != 0) { keybuffer += Enum.GetName(typeof(Keys), i); // add the pressed key to the keybuffer } } if (containsBarcode(keybuffer)) { doeHeleGafeDingenMetDeBarcode() } } |
Deze code werkt prima met toetsen die ik op mijn muis indruk en/of toetsenbord. Met de barcode scanner dus alleen niet. Ook het proberen om de thread even te laten slapen alvorens deze opnieuw de aanslagen te laten checken, alsmede het implementeren van een timer die na een vast interval alle toetsaanslagen ophaalde werken niet naar behoren.
Doe ik iets structureels fout? Of is de GetAsyncKeyState() functie niet bedoeld voor mijn toepassing. Zo ja is er een andere manier waarmee ik toetsaanslagen kan afvangen?