トップページ > 記事閲覧
GetInputChar()の挙動について
名前:DXファン 日時: 2023/08/09 16:29

お世話になります。RFIDリーダーを利用してカードの数値を入力しようとしています。 このRFIDリーダーはキーボードとして機能しますので、GetInputChar()で数値を1文字づつ入力しようと考えています。 以下のプログラムで実験しているのですが、カードの数値が例えば「2841039731」の場合は問題なく読めます。 「1564479571」の場合は「156479571」となってしまい、連続する数値「44」が1文字「4」になってしまいます。 代わりにキーボードから手入力で「1564479571」と入力すると、きちんと読み込まれます。 また、メモ帳でカードリーダー経由で読み込んだ場合は、問題なく読み込めます。 アドバイスをいただけると助かります。 ///////////////////////////////////////////////////////////////////// #include "DxLib.h" int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC) { int timer = 0; unsigned char c; //入力用 SetGraphMode(1366, 768, 32); ChangeWindowMode(TRUE); if (DxLib_Init() == -1) return -1; SetBackgroundColor(0, 0, 0); SetDrawScreen(DX_SCREEN_BACK); ClearInputCharBuf(); while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { ClsDrawScreen(); timer++; c = GetInputChar(true); if (c != 0){ printfDx("%6d %4d %c\n",timer, c, c); } ScreenFlip(); } DxLib_End(); return 0; } ///////////////////////////////////////////////////////////////////// **実行結果** @カードリーダー正常 234 50 2  236 56 8 238 52 4 240 49 1 242 48 0 244 51 3 246 57 9 248 55 7 250 51 3 252 49 1 254 13 ←改行 Aカードリーダー44が4に 650 49 1 652 53 5 654 54 6 656 52 4 658 55 7 660 53 5 662 50 2 664 49 1 666 57 9 668 13 ←改行 B手入力正常 957 49 1 983 53 5 1012 54 6 1124 52 4 1153 52 4 1210 55 7 1254 53 5 1287 50 2 1311 49 1 1334 57 9 1363 13 ←改行 **カードリーダーをメモ帳で読み込み**正常 2841039731 1564479571
メンテ

Page: 1 |

Re: GetInputChar()の挙動について ( No.1 )
名前:管理人 日時:2023/08/10 01:58

『Windows10 ではスクリーンキーボードで文字を入力すると何故か2回連続で同じ文字が入力されたことになる』 という現象が発生するので、 『短時間( 40ms以内 )に連続して同じ文字が入力された場合は2回目の入力を無視する』 という処理で無理矢理この現象を回避しているのですが、恐らくこれが悪さをして RFIDリーダーで読み込んだ文字の中で『44』の部分が『同じ文字が短時間で2回入力された』と判定されて 2個目の『4』が弾かれてしまったのだと思います 既存のバージョンではこの処理を無効にする機能が無かったので、無効にするための関数を追加しました よろしければこちらの暫定最新バージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 以下の関数を追加しました // Windows10 で WM_CHAR で短時間に連続して同じ文字が入力された場合の無効扱いにするかを設定する // Flag TRUE:短時間連続入力は無効扱いにする(デフォルト) FALSE:短時間連続入力も無効にしない int SetUseWindows10_WM_CHAR_CancelTime( int Flag ) ; RFIDリーダーでカードの数値を読み込む前に SetUseWindows10_WM_CHAR_CancelTime( FALSE ); を実行すると、1564479571 の場合も正常に読み込むことができるようになると思います よろしければお試しください m(_ _)m
メンテ
Re: GetInputChar()の挙動について ( No.2 )
名前:DXファン 日時:2023/08/10 09:27

ありがとうございます! 完璧に動作しました! 毎回ありがとうございます! 大感謝です!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存