0

オペレーティング システム (Windows) にキーボード イベントを挿入する必要があります。

全体像は、RS232 デバイス (バーコード スキャナーに似ています) を「USB キーボード エミュレート デバイス」に変換する必要があるということです。rs232 デバイスを制御するバックグラウンド アプリケーションがあり、データを受信するとすぐにデータをキーボード イベントに変換して、アクティブなアプリケーション (POS アプリケーション) が受信できるようにする必要があります。

Windows フックを使用してイベントをキャプチャする方法は知っていますが、新しいイベントをシステムのキューに入れることができるかどうか、およびその方法がわかりません。

アイデア?

4

3 に答える 3

1

私があなたの質問を正しく理解できたら、こちらをご覧になることをお勧めしSendInput(...)ます: http://msdn.microsoft.com/en-us/library/ms646310(v=vs.85).aspx

言語を指定しなかったので、C と仮定しました。

例えば:

    INPUT inp;

    memset(&inp, 0, sizeof(INPUT));
    inp.type = INPUT_KEYBOARD;
    inp.ki.wVk = VK_ESCAPE;
    SendInput(1, &inp, sizeof(INPUT)); //send keyDown Event
    inp.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &inp, sizeof(INPUT)); //send KeyUp Event
于 2011-01-18T08:46:39.940 に答える
0

シリアル ポート エントリをイベントとしてキャプチャし、SendKeys クラスのキーを再発行してみませんか? ドライバーの作成/テストは非常に複雑です (バグのあるドライバーは BSOD を閉じることができます) どの言語でそれを行う予定ですか?

于 2011-01-18T08:43:35.340 に答える
0

おそらく、BlockInput/SendInput を見始める必要があります。

これらは、アプリを作成した後に出てきました。PostMessage を使用して、アクティブなウィンドウに WM_KEYDOWN/WM_KEYUP メッセージをポストします。これは効果的ですが、さまざまな問題があります。(たとえば、キーボード シフト状態を大文字に設定する必要があります。Thunderbird では、バックスペースをゆっくりと送信する必要があります。)

于 2011-01-18T08:51:34.370 に答える