VB.NET で Windows アプリケーションを作成しています。ユーザーがキーボードから値を入力したのか、それともバーコード リーダーから値を入力したのかを知りたいです。キーボードからの値を、バーコード リーダーからの値とは別のデータベースに保存したいと考えています。
1 に答える
オプション1:
シリアル ポート (COM ポートで読み取られる raw シリアル デバイス) に接続されているバーコード スキャナーを取得します。ほとんどのバーコード スキャナーはキーボード ストロークをエミュレートするため、低レベルに移行せずに (次のオプションを参照)、バーコード スキャナーの入力とキーボード入力を直接区別する方法はありません (最後の更新を参照)。
シリアルポートに接続されたもの (または、シリアルポートはもはや一般的ではないため、USB 経由でエミュレートされたもの) を使用すると、入力がどこから来るかを完全に制御できます。
オプション 2:
時間ごとに入力された文字数をカウントします。バーコード スキャナーは、タイピングに比べてかなり高速にシーケンス (行) を挿入します。キーを押した回数をカウントしてテキストボックスで使用された時間を測定することで (CR+LF もスキャナーから送信されるため、測定点として使用します)、人間が入力しているかどうかを判別する 1 つの方法を得ることができます (1 人が速く入力している場合を除きます)。 f) として、またはコンテンツが注入されました。タイムアウトした場合は、入力を拒否/クリアします。
さらに、バーコードのチェックサム (それを含むものを使用する場合) を使用して、時間測定に加えて追加の検証を行うことができます。
(次のオプションのように ctrl + v をオーバーライドすることで、貼り付けを検出できます)。
オプション 3:
オプション2を組み合わせますが、テキストボックスで測定する代わりに、ProcessCmdKey()関数を(オーバーライドして)タップし、テキストボックスにフォーカスがある場合はそこで測定します。このようにして、最初に入力をバッファリングし、時間を測定し、設定されたタイムアウト値内であれば、テキストボックスに行を挿入できます。
オプション 4:
これも良いオプションかもしれません:
http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/
オプション 5:非技術的アプローチ -
使いやすさの向上: バーコードはタイプするのではなくスキャナーで入力する必要があることを視覚的に明確にします。シンプルで正解すれば有効でもあるので選択肢に入れておきます(残念ながら何が正解というわけではありません)。
アプローチには、f.exが含まれる可能性があります。テキストボックスの透かし(「入力しないで、スキャンしてください!」またはその順序で何か)。通常のテキストボックスと区別するために、別の色、境界線、サイズなどを指定し、ヘルプ テキストを関連付けていつでも利用できるようにして、明確さを向上させます。