Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

  • da ist es:

  • ich habe die ConsoleWrite Anweisungen noch entfernt, dann lief es noch etwas länger, mit dem entfernen der Funktion StatusSave läuft es ohne Probleme...

    Jedoch schreibt er mir dann den Scanwert nicht mehr weg..... Geht das Wegschreiben noch irgendwie schneller ?

  • Probier dasselbe, was ich bei dem Beep vorgeschlagen hab auch fürs FileWrite. Also $sBuffer global machen und beim beep (in der hauptschleife) auch ins log schreiben.

    Wenn du lang dauernde Codeteile (Abhängig von der Festplatte kann schreiben nen moment dauern, wobei es eig. von windows gebuffert werden sollte... ) aus den Funktionen rausnimmst, die direkt aus der _KeyProc aufgerufen werden und stattdessen nur eine Variable setzt und dann später in der Hauptschleife auf die geänderte Variable reagierst, blockierst du die _KeyProc Funktion nicht.

    Ich vermute, dass das Betriebssystem bei FileClose die Daten tatsächlich auf die Festplatte schreibt und das Script darauf wartet. Es könnte also auch helfen, wenn du das FileOpen und FileClose woanders machst. Wird aber schwer, weil du ja den Code als Dateinamen nutzt...

  • Hi,

    das sieht sehr gut aus, ich werde es morgen nochmal auf Herz und Nieren testen, aber bisher funktioniert es sehr gut :)

    Besten Dank für eure Unterstützung, ihr habt mir wirklich sehr weitergeholfen...

    Kann man dem Forum hier irgendwie etwas gutes tun, eure Unterstützung ist ja wirklich super.

  • aber bisher funktioniert es sehr gut

    Hast Du es in etwa so gelöst?

    So, würden auch die Beeps nichts ausmachen, weil die Funktion erst in der Hauptschleife aufgerufen wird.

  • Warum überhaupt die Beeps? Die kannst du doch (normalerweise) auch über den Scanner machen lassen und das dann komplett unabhängig von dem verwendeten Programm.

  • Ich frage mich die ganze Zeit, um welchen Scanner geht.

    Bitte einmal den Scanner namen incl. evtl. Modelbezeichnung posten.
    (Ich empfehle zur Modelbezeichnung und Name : https://www.michaelkrug.de/barcodescanner…ed_laser_und_2d)

    Mit den Angaben kann man dann nämlich im Netz nachsehen, ob es bestimmte Funktionen gibt.
    Bei meinem Kann man sich im Netz drei Din A4 Seiten herunter lkaden und dort sind Strichcodes drauf, mit den man dann den Scanner einstellen kann.

    Ich meine hioer sollten wir anfangen. Meistens habe ich bei Handscannern festgestellt, das so fast jedes Problem zu lösen war.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hi an alle,

    ich versuche aktuell ein ähnliches Problem zu lösen, ich scheitere aber an der Umsetzung. Vielleicht kann mir einer einen Tip geben:

    Ich möchte ebenfalls einen Scan eines Barcodescanners abzufangen, dieser soll danach im Hintergrund "aufbereitet" werden und dann erst an das "System" übergeben werden. (In das entsprechende Eingabefenster. Dieser Barcode ist im PDF417 Format und befindet sich an einer Masterbox für Tablets/Mobiltelefone. In diesen Masterboxen sind entweder 10 oder 20 Geräte. In der Warenwirtschaft werden die IMEI's/Seriennummern ja im Wareneingang erfasst. Dazu wird jede einzelne Nummer angescannt (normaler Code 128)
    In besagtem "Mastercode" sind aber alle Nummern der Box plus ein paar andere Informationen erhalten.
    Diese sind: Chargen Nummer;EAN;Menge in der Masterbox;gefolgt von den 10 oder 20 Nummern mit ; als Trenner.
    Ich scanne einfach mal hier einen rein: (die Imeis nehme ich mal raus)

    T6FUS0127;8806092585201;20;IMEI1;IMEI2;IMEI3;IMEI4;IMEI5;IMEI6;IMEI7;IMEI8;IMEI9;IMEI10;IMEI11;IMEI12;IMEI13;IMEI14;IMEI15;IMEI16;IMEI17;IMEI18;IMEI19;IMEI20

    Nun möchte ich den String folgerndermaßen aufbereiten:

    Bis zu IMEI1 kann alles weg (maximal noch auf Menge prüfen ob 10 oder 20, aber das wäre dann Schritt2 denke ich), dabei dachte ich an StringTrimLeft da die Zeichen ja nicht gebraucht werden.

    Dann soll die IMEI1 + CR + kleines Delay ans System gesendet werden, danach IMEI2 + CR + kleines Delay (CR bewirkt den Zeilenumsprung in der Warenwirtschaft, ENTER würde aber auch funktionieren, Delay, damit die Warenwirtsschaft die Seriennummer auch verarbeiten kann, müsste man testen inwieweit das nötig wäre) usw. bis IMEI 20. Dann kommt die nächste Masterbox

    Klingt vielleicht erstmal nicht viel, 20 Seriennummern zu scannen, aber wenn man dann mal 1000 Geräte ein oder ausbuchen muss, macht das schon einen Unterschied. Vielleicht könnte man auch mit dem ; als Trenner in der Erkennung Arbeiten, da die Seriennummern teilweise unterschiedliche Längen ausweisen.

    Ich habe mit dem Code von Oscar etwas probiert und bekomme das Abschneiden des Strings auch hin, aber dann fehlt mir einfach der weitere Ansatz. Ein GUI brauch ich ja nich, maximal zum debuggen. Hat einer einen Ansatz, welche Funktion(en) ich nehmen könnte dazu?

  • Hallo Mapamann,

    ich bin mir nicht sicher was genau du eigentlich für ein Prob hast. Geht es nun ums Einlesen oder um den Scan zu verarbeiten?

    Zitat

    ich habe mit dem Code von Oscar etwas probiert und bekomme das Abschneiden des Strings auch hin

    Mit dem Script von Oscar wird der gescannte String sicherlich in eine Variable gespeichert.
    Den Inhalt kannst du zuerst mit StringSplit ( "string", "delimiters" [, flag = 0]) - siehe Hilfe - in ein Array schreiben. Den Semicolon als delimiter setzen und du hast alles was du brauchst in einem Array.
    Aus dem Array kannst du dann jeweils den Index nehmen den du brauchst und weiter verarbeiten...

  • Hi,

    danke erstmal für die schnelle Antwort. Es geht mir um beides. Zuerst in eine Variable einlesen dann Ver/bearbeiten und dann erst ans System übermitteln bzw die Warenwirtschaft und das ganze im Hintergrund ohne GUI

    Einmal editiert, zuletzt von Mapamann (15. September 2022 um 13:43)

  • Moin,

    mal ein Beispiel für das Aufteilen der eingelesenen Daten:

  • Hallo Velted,

    danke erstmal, das klappt soweit und ich verstehe den Code auch. Ich habe aber noch immer ein Problem, wie ich quasi die "Rohdaten" abfange.
    Ich versuche es mal so zu schreiben: Scannen vom Barcode --> "einlesen in Variable $sData --> in der Funktion ProcessScan entsprechend "aufbereiten" und dann die entsprechenden Arrays erst ans Windowssystem ausgeben. Glaub das ist etwas zu hoch für mich :/

  • Hallo,

    das Script vom Oscar funktioniert soweit sehr gut, ich habe nur noch ein Problem dabei, wenn ich bzw. der Anwender später den Scanner zu schnell bedient, also er einen Barcode nach dem anderen ohne dazwischen zu warten scannt, werden die Daten nicht mehr übernommen. Ich denke das dann der "Hook" nicht mehr funktioniert. Kann das sein und wie könnte ich das überprüfen ? Mit diesem Hook kenne ich mich leider so garnicht aus, bin also über Jeden Hinweis sehr dankbar.

  • Hi Oscar ,

    die hatte ich schon auskommentiert, leider ohne den gewünschten Erfolg. Kann ich den Hook nicht während der Verarbeitung ausschalten und dann wieder einschalten ?

    Dann würden die Daten zwar in der "Bearbeitungszeit" nicht erfasst , aber danach würde die Verarbeitung wieder funktionieren. Stand jetzt ist es ja so, dass er dann garnicht mehr auf den Scanner reagiert und ich das Script beenden und neu starten muss ?

  • Hi Oscar ,

    du hast Recht, wenn ich das Wegschreiben der Daten ganz rausnehme (zum test), habe ich das Problem nicht mehr, dass das script beim schnellen scannen von Barcodes aussetzt. Aber wie fange ich das denn ab, in eine Variable Zwischenspeichern aber wann soll ich diese denn dann speichern ?

  • Aber wie fange ich das denn ab, in eine Variable Zwischenspeichern aber wann soll ich diese denn dann speichern ?

    Beschreibe mal den Ablauf.

    Was soll mit den eingescannten Daten passieren?

    Alle Daten in eine Datei oder jeder Scan in eine Extra-Datei?

    Das Problem könnten auch die Beeps sein, weil das Script währenddessen "angehalten" wird und wenn Du schneller scannst als die Beeps dauern, dann läuft irgendwann der Tastaturpuffer über.