Script für barcodescanner

  • Ich danke Dir für die Erklärung und 'Ja', ich habe das Programm im Vordergrund laufen.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Habe es jetzt mit den InputBoxen gemacht, da der barcodescanner ja immer ein Enter hinterher senden kann, und ich somit auch nicht auf ok klicken muss.
    Und wenn mein Script dann fertig ist, startet es wieder die inputbox :D

    Vielen dank

  • Du bist zufrieden undd as Problem ist gelöst?
    Tust DU uns dann einen Gefallen und stellst den Beitrag BITTE auf "gelöst"?
    Danke Dir und beehre uns bald wieder. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Doch das geht schon:

    Hallo Oscar,

    aus reiner Neugier habe ich mir mal einen Barcodescanner aus der Firma geliehen und habe das Skript ausprobiert. Funktioniert (wie bei dir zu erwarten war) wunderbar!
    Ich musste den Scanner aber erst einmal wieder abstöpseln, weil er ständig eine Art Warnpiepen abgibt. Da muss ich erst einmal einen Blick ins Handbuch werfen, um zu erfahren, was ihn stört.

    Aktuell habe ich kein Anwendungsgebiet dafür, aber das könnte nochmal sehr interessant werden. Also vielen Dank für das Skript. Allerdings frage ich mich nun, ob man auch irgendwie verhindern kann, dass der Scan in das aktive Fenster geschrieben wird.
    Geht das?
    Oder wie ist das Auslesen des Scans im Hintergrund gedacht? Ich meine, den größten Sinn würde das doch machen, wenn man selbst "ungestört" weiterarbeiten kann, oder?

    Grüße autoiter

  • Hi,

    Aktuell habe ich kein Anwendungsgebiet dafür, aber das könnte nochmal sehr interessant werden. Also vielen Dank für das Skript. Allerdings frage ich mich nun, ob man auch irgendwie verhindern kann, dass der Scan in das aktive Fenster geschrieben wird.
    Geht das?
    Oder wie ist das Auslesen des Scans im Hintergrund gedacht? Ich meine, den größten Sinn würde das doch machen, wenn man selbst "ungestört" weiterarbeiten kann, oder?

    du hast immer noch nicht begriffen, was der Scanner eigentlich ist! Für den Rechner ist der Scanner ist nichts weiter als eine angeschlossene Tastatur. Du kannst das gerne ausprobieren, indem du eine "normale" Tastatur bspw. an einen Laptop anschließt.
    Öffne einen Editor und fange an, Text zu schreiben. Du wirst feststellen, dass es völlig unerheblich ist, auf welcher der angeschlossenen Tastaturen du tippst, die Tastenanschläge werden immer im aktuell aktiven Fenster ausgewertet!
    Man müsste also die "externe Tastatur" ( den Scanner) identifizieren. Das geschieht beim Scanner anhand von einstellbaren Steuercodes. Es werden also nicht bspw. die Barcode-Buchstaben "ABCDEFG" übertragen, sondern "Hallo, ich bin der Scannersteuercode und sende ABCDEFG". Steuercodes siehe Handbuch!
    Diese Steuercodes können sowohl vor und/oder nach dem eigentlichen Barcodeinhalt stehen.
    Der vom Scanner gesendete Barcode ist somit eindeutig als Scancode identifizierbar und somit auch einem bestimmten Fenster zuweisbar! Während man nun im "Vordergrund" arbeitet, kann die als Barcode identifizierte "Tastatureingabe" aufgezeichnet und bspw. einem im Hintergrund laufenden Control zugewiesen werden.
    Clevererweise benutzt man eine Übertragung vom Scanner, welche jeden einzelnen vom Scanner gesendeten Buchstaben als gescannten code identifiziert...

    Oscars Script macht übrigens nur die Tastatureingaben sichtbar...dafür brauchst du keinen Scanner, das kannst du auch mit der "normalen" Tastatur machen^^

  • Hi Andy,
    danke für die Erhellung. Tatsächlich hatte ich nicht gepeilt, dass der Scanner für den Rechner praktisch eine Tastatur ist. Auch hatte ich Oscars Skript nicht verstanden. Dabei war es ja eigentlich klar. Immerhin habe ich Esc zum Verlassen benutzt, das auch einfach nur ein Fall von Eingabe ist und in den Cases erfasst ist.. Ich schiebe es mal darauf, dass der Scanner ständig piepte und mich das abgelenkt hat. (mit mangelhaftem Intellekt hat das sicher nichts zu tun) ;)
    Wo wir aber bei fehlendem Verständnis sind..
    Ich habe das Handbuch geladen und dort findet man auch alle möglichen Steuercodes. Z.B. kann man ein Standard Präfix und Standard Suffix auswählen. Das Präfix ist schon das CR - immerhin wurden die Barcodes in die Konsole geschrieben. Mal unabhängig davon, ob man nun jeden Buchstaben oder jeden Barcode eindeutig markiert, verstehe ich nicht, wie man die Eingabe abfangen kann, um sie nur im Hintergrund zu verarbeiten. Da bin ich im Grunde auf dem gleichen Niveau wie shakoon. Ich kenne auch nur von HotKeySet, dass eine Eingabe wirklich abgefangen wird. Ich habe aber keine Ahnung, wie das funktioniert. Weiß hier jemand Bescheid?

    Grüße autoiter

  • Hi,
    wie funktioniert Oscars Script?
    Es werden mit _KeyProc() "Tastendrücke" abgefangen und (nur im Falle eines Tastendrucks von 0 bis 9) per $buffer &= Chr($keycode)
    als String aufgezeichnet...
    Wird ein @CR gefangen, wird der String ausgegeben...

    Wie unterscheidet man nun einen Scancode von einem Tastaturanschlag?
    Als Präfix wird ein auf einer "normalen" Tastatur nicht unmittelbar eingebbares Zeichen (oder Zeichenfolge) programmiert, als Postfix das übliche @CR.
    Oscars Script zeichnet natürlich alle Tastatureingaben auf, man muss also lediglich den "Tastaturstring" auseinanderdröseln.
    Angenommen, der Scanner-StartString ist das CHR(255)-Zeichen, dann muss man nur den "dazwischen" stehenden String (bis zu @CR ) auswerten, simple Stringfunktionen FTW!

    Im folgenden Script wird der "Scannermodus" mit dem ^-Zeichen (ascii 220) angeschaltet, beendet mit "Enter". Erlaubt sind die Ziffern 0-9.

    Man kann das Script testen, indem man nach dem Start in einem Editor anfängt zu tippen, dann irgendwann den "Scanner" über den Prefix ^aktiviert und ziffern tippt.
    Die im Scannermodus eingetippten Ziffern werden nicht an die Anwendung weitergegeben, sondern nur als string gespeichert.
    Nach dem abschließenden "Enter" kann man mühelos den String per Send() oder Controlsend(im Hintergrund an eine andere Anwendung senden...

  • Hi Andy,
    ich habe das heute mal getestet. Ich muss gestehen, dass ich den Startcode nicht setzen konnte. Hat jedenfalls nicht funktioniert. Dann habe ich es von Tastatur gestartet und der Tooltip wurde so lange mit Zeichen gefüllt, bis das Endzeichen vom Scanner kam. Danach kamen die Tastatureingaben wieder ins aktive Fenster. Feine Sache.

    Grüße autoiter

  • Ich muss gestehen, dass ich den Startcode nicht setzen konnte. Hat jedenfalls nicht funktioniert.

    Welchen Scanner hast du, wir haben teilweise Stress bei der Programmiereung von Geräten der >1000€-Klasse!
    Es kann gut sein, dass dein Scanner deine Programmierung garnicht "begriffen" hat!

  • Sehr gut möglich, dass das Programmieren einfach nicht geklappt hat.
    In meinem Fall handelt es sich um einen billigen Scanner (Metrologic Focus MS1690). Einfach ein olles Ding, dass bei uns in der Firma rumlag. Die wurden irgendwann mal aus irgendeinem Grund angeschafft..
    Ich zeige das morgen mal einem Kollegen in der Firma, der mit dem Gerät umgehen kann.

    Grüße autoiter

  • @Andy

    Danke schon mal für deinen Code. Vielleicht bin ich auch als Anfänger zu blöd um es zu verstehen.

    Der Prinzipielle Ablauf ist mir klar.

    Folgende Frage.

    AutoIt
    Switch $keycode
            Case 255, 220                   ;scanner startzeichen


    wie verbindest du die Zahle mit dem Steuerzeichen "^" Ascii ?

    Ich bräuchte als Startzeichen "|" und da ich einen Hexcode übersende müssten auch nicht nur die Zahlen übermittelt werden, gut dass müsste ich ja im Code so ändern.

    AutoIt
    Case 37 To 122                   ; 0 - 9
                If $scannerbufferflag = 1 Then

    Wie bekomme ich die dann in eine Variable?

    um in meinem Programm weiter zulaufen ?

    Mein Aktueller Code ohne den Buffer findet man in dem Beitrag.

    https://autoit.de/index.php/Thre…ufgerufen-wird/

    Danke für die Hilfe

    Steffen

  • Hi Autoiter,

    gut mit der Hilfe finde ich das der Code dann "OCT" ist.

    Ich habe einfach mein Zeichen was ich als Startzeichen benutze in meinem QR Code ändern können.

    Nur noch die Frage wie greife ich den Inhalt ab als Variable ?

    Gruß

    Steffen

  • Wie meinst du das, "Inhalt als Variable"?
    Den String, welcher dir vom Scanner gesendet wird?

  • Hallo Oscar, hallo zusammen,

    ich habe dein Script hier für den Scanner gefunden und ich glaube das ich genau das gesucht habe.

    Kannst du mir noch einen Tipp geben, wie ich die Ausgabe auf dem Bildschirm bzw. das geöffnete Programm verhindern kann ?

    Hintergrund ist, ich öffne mit AutoIt eine Internetseite, die bei Änderung und in regelmässigen Abständen aktualisiert wird. Das funktioniert soweit auch schon.

    Jetzt möchte ich noch zusätzlich, also im Hintergrund Barcodes scannen können, die dann in eine Datei weg geschrieben werden, aber halt nicht auf dem Bildschirm angezeigt werden sollen.

    Genau so möchte ich auch auf eine Inputbox verzichten, da diese ja mein Script bzgl. der Update Funktion aussetzen würde.

    Vielleicht könnt ihr mir ja einen Tipp geben, vorab schon mal danke.

  • Setze einfach ein ; vor allem was Du im Script nicht möchtest. Da wo zum Beispiel die Inpuxbox erstellt wird, einfach gaaaaanz links ein ; rein.

    Wenn es mehrere Zeilen sind arbeite mit #cs und #ce. Zum Beispiel bei Funktionen.

    Da Du uns nicht dein bisheriges Script zeigst, kann ich und auch kaum ein anderer helfen. Und wenn Du an dem Script etwas geändert hast müsste ich mal die :Glaskugel: fragen, was Du wo geändert hast, damit ich es nachverfolgen kann. Und das wird auch allen anderen so gehen. Also proste mal das Script in der aktuellen Fassung von dir und dann einfach etwas Geduld.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Du bist zufrieden undd as Problem ist gelöst?
    Tust DU uns dann einen Gefallen und stellst den Beitrag BITTE auf "gelöst"?
    Danke Dir und beehre uns bald wieder. ;)

    JA dann geht das etwas geordneter zu, das stimmt. Guter Hinweis.