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