2

バーコードスキャナーを読み取れるプログラムを書こうとしています。さらに、アプリケーションがフォーカスされているウィンドウではない場合(つまり、システムトレイで実行されている場合など)でも、入力を読み取るために必要です。

WinFormsのキーボードからバーコードスキャナーを区別するというタイトルのこの記事を見つけました。これは正確な問題を解決しているようです。それはかなりうまく機能しています、それは私のデバイスを検出し、WM_INPUTメッセージを処理します。

ただし、RAWINPUT.keyboard.MessageがWM_KEYDOWN(0x100)であるかどうかを確認しています。これを受け取ることは決してないようです。この記事で提供されているコードで変更した唯一のコード行は、Console.Out.WriteLineを追加して、そのメッセージの実際の値を出力することです。

Console.Out.WriteLine("message: {0}", raw.keyboard.Message.ToString("X"));
if (raw.keyboard.Message == NativeMethods.WM_KEYDOWN)
{
    ....

出力内容は次のとおりです。

message: B
message: 1000B
message: 3
message: 10003
message: 8
message: 10008
message: 3
message: 10003
message: 5
message: 10005
message: 3
message: 10003
message: 8
message: 10008
message: 8
message: 10008
message: 4
message: 10004
message: 9
message: 10009
message: 9
message: 10009
message: 3
message: 10003

これが正しく完了したときに受け取ると期待している値は次のとおりです。

257232709

メモ帳にスキャンして確認しました。

ここでオペレーティングシステムが適切かどうかはわかりませんが、Windows764とVisualStudio2010および.NETFramework3.5でこれを実行していることに言及する必要があると思いました。スキャナーはUSBバーコードスキャナー、シンボルLS2208、「HIDKEYBOARDEMULATION」としてセットアップされています

4

3 に答える 3

3

ポイントオブサービスシステムを構築するためのMicrosoftの無料ライブラリであるmicrosoft POS.netを使用すると、最も一般的なバーコードスキャナーを読み取ることができ、バーコードがスキャンされたときにイベントが発生します。このライブラリは無料で、十分にサポートされており、OPOS ドライバーを備えた任意のバーコード スキャナーで動作します。

于 2010-06-13T22:12:04.230 に答える
0

問題の記事が解決する解決策は本当に必要ないことに気づきました。何度か読んだ後、プレフィックスとサフィックスのデータを使用するようにスキャナーをセットアップできない状況を処理するためのものであることに気付きました。私にとって幸運なことに、私はこれを行うことができます。

それ以外の場合は、記事の作成者とチャットしましたが、問題はWindows 64を実行していたことが原因であると考えられます。一部のコードで誤ったデータ型が使用されているため、64ビットでデータが誤ってマーシャリングされる可能性があります...できませんでしたただし、これを確認します。

ただし、低レベルのWindowsプログラミングでは素晴らしい演習でした。相互運用機能を使用するためのpinvoke.netの優れたリソース...

于 2010-05-27T15:10:39.350 に答える
0

ソフトウェア以外の解決策の 1 つは、このスキャナ用の RS-232 ケーブルを入手して、COM ポートから読み取るだけです。そうすれば、どのウィンドウまたはコントロールにフォーカスがあるかを気にする必要がなくなります。その特定のスキャナーには COM ポート エミュレーション ドライバーがありますが、おそらく Windows 7 では動作しません。

于 2010-05-16T03:42:48.737 に答える