Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
iMessageFilter zur Unterscheidung von USB Scanner und Tastatur
Fabian710
myCSharp.de - Member



Dabei seit:
Beiträge: 44
Herkunft: Gütersloh

Themenstarter:

iMessageFilter zur Unterscheidung von USB Scanner und Tastatur

beantworten | zitieren | melden

Hallo zusammen.
Ich habe ein Problem.
Habe ein USB Scanner und eine Tastatur.
Über beide sollen Eingaben erfolgen, allerdings beim Scanner andere Dinge durchgeführt werden.
Ich komme bei der Verarbeitung der imessage nicht voran. Kann mir jemand ein Tipp geben wie ich die da unterscheide?

Danke!!
private Nachricht | Beiträge des Benutzers
trib
myCSharp.de - Member



Dabei seit:
Beiträge: 690

beantworten | zitieren | melden

Hallo Fabian,

was bitte ist der iMessageFilter?
Soweit mir bekannt, funktionieren die allermeisten Scanner per USB wie eine Tastatur. Demnach kann man die Tastatureingabe genauso auslesen wie die des normalen Keyboards.
Ein Ansatz wäre daher, die Zeit der Eingabe bis zum mitsenden des abschließenden "Return" zu messen. Der Scanner macht das innerhalb von Millisekunden. Ein Mensch an der Tastatur benötigt natürlich deutlich länger.
Eine andere Alternative ist die Konfiguration des Scanners. Die meisten Modelle bieten eine Konfiguration mit Start- und Endzeichen an. Dann wird z.B. ein STX und ein ETX mitgesendet. So ist es natürlich ein einfaches die Eingaben von Tastatur und Scanner zu unterscheiden.

Gruß
trib
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Wir haben in einer einzigen Anwendung einen über die Tastatur geschleiften Scanner (ansonsten native).

Wir verlangen im Barcode Präfix und Suffix...

[vomScanner]

vonTastatur

So kannst Du das unterscheiden.

--> also im Prinzip eine der von trib vorgeschlagenen Methoden.

Funzt jeden Tag ohne Problems.

Gruss
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
Fabian710
myCSharp.de - Member



Dabei seit:
Beiträge: 44
Herkunft: Gütersloh

Themenstarter:

beantworten | zitieren | melden

Ich möchte damit unterscheiden, ob die Eingabe vom Scanner oder von der Tastatur kommt. Er soll sie "nur" besonders beachten wenn sie vom Scanner kommt (Materialnummer wird eingescannt, darauf hin soll automatisch die Suche gestartet werden) die Eingabe mit der Tastatur soll an verschiedenen Stellen weiterhin ohne Probleme möglich sein. Ich hab da aber irgendwie immer noch eine totale Denkblockade.
Wie kann ich auf den Präfix und Suffix zugreifen und wie dann auf die eigentliche Message?

Dadurch, dass sobald ich in einer Textdatei den Barcode einscanne, zeig er mir dort ja sofort die richtige Nummer an. Aber irgendwie weiß ich einfach nicht, wie ich sie abfange und dann bearbeite...Sch*** Schlauch auf dem ich stehe :-(
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Fabian710,

das Thema, wie man eine manuelle Eingabe von der eines Barcode-Scanners unterscheiden kann, wurde schon einige Male besprochen. Bitte benutze die Forumssuche und poste die besten Treffer hier. Vielen Dank!

herbivore
private Nachricht | Beiträge des Benutzers
Fabian710
myCSharp.de - Member



Dabei seit:
Beiträge: 44
Herkunft: Gütersloh

Themenstarter:

beantworten | zitieren | melden

Ich habe lange gesucht doch nicht das passende gefunden.
Es klappt ja, dass wenn ich etwas einscanne, es in der Textbox steht.
Ich will aber, das man nicht auf der Tastatur rumklicken kann und dann alles direkt in der Textbox steht, sondern nur wenn diese ausgewählt ist.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Fabian710,

wenn du unterscheiden kannst, von wo die Eingabe kommt, kannst du doch im TextChanged die Änderung rückgängig machen, wenn sie von der Tastatur kommt, das aber gerade nicht gewünscht ist. Im Grunde so ähnlich wie [FAQ] Event nur bei Benutzeraktion auslösen, nicht bei programmtechnischer Änderung, nur hier eben abhängig von der Quelle.

BTW: Wenn du lange gesucht hast, warum lässt du die anderen dann nicht daran teilhaben und postest die besten Treffer, worum ich dich gebeten hatte? "gemeinsam mehr erreichen" bedeutet eben auch, dass Hilfe keine Einbahnstraße ist und du deinen Teil beitragen solltest.

herbivore
private Nachricht | Beiträge des Benutzers
Fabian710
myCSharp.de - Member



Dabei seit:
Beiträge: 44
Herkunft: Gütersloh

Themenstarter:

beantworten | zitieren | melden

Ich fange die Eingaben mit der IMessageFilter.PreFilterMessage(ref Message m) ab.
Dort soll dann zunächst überprüft werden, ob die Nachricht mit einem festgelegten Präfix beginnt, wenn ja, dann wird sie eingelesen und wenn er den abschließenden Suffix festellt, wird beendet. Leider funktioniert es nicht :-(
Präfix und Suffix bestehen jeweils aus drei hex-Werten....


 bool IMessageFilter.PreFilterMessage(ref Message m)
        {

            if (m.Msg == 0x0100)
            {
                char code = (char)m.WParam.ToInt32();
                if (_prefixcheck == false)
                {
                    if (code == d[counter])
                    {
                        if (counter < 2)
                        {
                            _prefixcheck = false;
                            counter++;
                            return true;
                        }
                        else if (d[counter] == (char)0x03)
                        {
                            _prefixcheck = true;
                            _scan = true;
                            return true;
                        }
                        else
                        {
                            _prefixcheck = true;
                            _scan = true;
                            return true;
                        } 
                    }
                }

                else if (_scan == true)
                {
                    uint scanCode = (uint)(((int)m.LParam >> 16) & 0xFF);
                    char c = (char)(m.WParam.ToInt32());

                    if (c == e[tempCounter])
                    {
                        if (tempCounter ≤ 1)
                        {
                            _dataTemp += c;
                            tempCounter++;
                            return true;
                        }
                        else if (tempCounter == 2)
                        {
                            _scan = false;
                            _dataTemp = string.Empty;
                            _suffixcheck = true;
                            return true;
                        }
                        return true;
                    }
                    else if (c != e[tempCounter] && _dataTemp != string.Empty)
                    {
                        tempCounter = 0;
                        _data += _dataTemp;
                        _dataTemp = string.Empty;
                        _data += c;
                        return true;
                    }
                    else
                    {
                        _data += c;
                        return true;

                    }
                }
                else if (_suffixcheck == true)
                {
                    _scan = false;
                    _prefixcheck = false;
                    _suffixcheck = false;
                    scan = _data;
                    _data = string.Empty;
                   MessageBox.Show(scan);

                }
                }
return false;
        }
private Nachricht | Beiträge des Benutzers