キーボードの「ウェッジ」からの入力を処理する最良の方法

StackOverflow https://stackoverflow.com/questions/42437

  •  09-06-2019
  •  | 
  •  

質問

私はキーボード ウェッジ マグカード リーダーから入力を受け取る C# POS (販売時点情報管理) システムを作成しています。これは、磁気ストライプから読み取ったデータは、あたかもキーボードで非常に素早く入力されたかのように入力されることを意味します。現在、私は KeyPress イベントにアタッチし、カード スワイプ センチネル文字を含む一連の非常に高速なキー押下を検索することでこれを処理しています。

この種の入力に対処するより良い方法はあるでしょうか?

編集:デバイスは単にデータをキーストロークとして表示するだけで、他のドライバーを介してインターフェイスすることはありません。また、私たちはこのような種類のデバイスを幅広く使用しているため、理想的には、使用されているウェッジの特定のモデルに関係なくメソッドが機能する必要があります。ただし、他に選択肢がない場合は、やるしかありません。

役に立ちましたか?

解決

できることの 1 つは、文字列の前後に 1 つまたは複数のエスケープ文字を表示するようにウェッジ リーダーを設定できる必要があることです。これらのエスケープ文字は、マグカード入力が近づいている (またはちょうど入力したばかりである) ことを知るために使用します。

これと同じ手法がバーコード リーダー デバイスでも使用されているため、アプリケーションはフォーカスを取得したり、デバイスからのデータ入力を処理したりすることができます。

このアプローチのマイナス点は、外部デバイスを適切に構成する必要があることです。これは展開上の問題である可能性があります。

これは、デバイスが単にデータをキーストロークとして表示し、他のドライバーを介してインターフェイスしないことを前提としています。

他のヒント

デバイスのハードウェア ID が事前にわかっている場合は、Raw Input API を使用することもできます。 最近これについてブログに書きました。 非常識かもしれませんが、私の要件を満たしました。私の場合の主な目標は、誰かがパレット上のアイテムをスキャンするために歩き回っているときに誤って何かにぶつかったためにアプリケーションがフォーカスを失った場合でも、入力を受信できるようにすることでした。第 2 の目標は、スキャン ガンで使用されている既存のサードパーティ アプリケーションが壊れてしまうため、センチネル キャラクターを追加できないことです。

以前にセンチネル キャラクター メソッドを実行したことがありますが、どちらも KeyPress アタッチまたは低レベルのキーボード フックを介して SetWindowsHookEx() または経由 KeyPreview アプリケーションのメインフォーム上で。それが要件を満たしている場合は、その方法を使用する方がはるかに簡単で簡単です。そのためには、すでに提供されている推奨事項を優先します。

許容できる方法で処理していると思いますが、カードがデータを送信する速度に注意してください。ワイヤレス バーコード スキャナーがあり、アプリケーションが処理できる速度でキーボードにキー ストロークを投げることがあります。

また、ソフトウェアを他の地域に配布している場合は、キーのストロークが異なる可能性があります。たとえば、スペイン (フランスだと思いますが、フランスの可能性もあります) では、キーボードの一番上の行は !"£$%^& です。() 米国/英国 1234567890 に反対し、カード リーダーが米国/英国に設定されている場合、!"£$%^& が送信されます。() を 1234567890 の代わりに使用します。ウェッジは押されたキーをエミュレートするだけであり、Windows がそれを異なる解釈をする場合は、それが問題です。

もう一票 jttrainoさんのアイデア. 。私は、USB や RS232 だけでなくキーボード ウェッジもサポートする必要がある POS システムのカード リーダーや小切手リーダーでも同じことを行います。

基本的には、キーボードから入力される可能性が低い短い文字シーケンスを選択し、これらの文字が入力されるのを確認するようにメッセージ処理ループをプログラムします。パターンに一致する文字の完全なストリームを取得した場合は、指定した「終了」シーケンスに到達するまで、または受信シーケンスがエラーであると判断するまで、残りの入力をデコードできます。編集マスクやさまざまな画面の動作などを考慮して、通常のキーボードからアプリに入力するのが難しい、または不可能な文字列を選択してください。

開始点としては、ティルダプリング (~!) のようなものを使用するのが良いでしょう。これらの文字は、誰かの個人情報に表示される可能性は低く、メモのテキストなどに一緒に表示される必要性も低いからです。:-)

欠点は、まさに jttraino が言ったように、おそらく各リーダー デバイス自体を設定/プログラムする必要があることです。一部のメーカーでは、これをかなり簡単に行うことができます。どこのキットを使用していますか?マグテック?ウェルチ・アリン?

私は二番目です @jttraino さんのアイデア.

これは、バー スキャン/コード リーダーやその他のプラグ アンド プレイ (PnP) デバイスに適した方法です。以前の任務で、同じ手法を使用して、いくつかの 1D および 2D バーコード スキャナを構成しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top