0

私は現在、組み込みLinuxマシンに接続されたUSBカードスワイプを持っており、私が知ることができることと私が研究したことから、それはキーボードとして機能し、入力しているようにすべてのデータを入力します。これで、このすべてのデータを取得してファイルに保存するperlスクリプトができました。唯一の問題は、perlスクリプトがフォアグラウンドで実行されている場合にのみデータを取得することを認識していることです。それ以外の場合は、「キーボード」入力がどこに入力されますか。

私の質問は、入力を読み取るたびにこのカードをスワイプしてスクリプトを実行させるにはどうすればよいですか?または、バックグラウンドで実行されているアプリを使用して、どういうわけかデータをキャプチャできますか?バックグラウンドで実行されているC++プログラムのIEは、マシンへの入力をcinが読み取りますか?

私はカードスワイプリーダーをいじったことがないので、それらがどのように機能するかについて100%確信がありません。

これに関する提案をいただければ幸いです。

4

4 に答える 4

5

私はこれをほぼ正確に実行しました(キーボードとして表示されるUSBバーコードリーダーを除く)。

私のシステムには、ベンダーと製品IDに基づいて接続されたときにUSBデバイスを検出するカスタムUSBホットプラグルールがあります。eventこのルールは、の対応するデバイスへのシンボリックリンクを作成し/dev/input/ます。

次に、常に実行されるCデーモンがあります。ディレクトリを監視し/dev/input/、シンボリックリンクが表示されるのを確認すると、eventデバイスを開きます。次に、EVIOCGRABIOCTLを使用してイベントデバイスを排他的に取得し(これにより、データが他のアプリケーションでキーボード入力として表示されなくなります)、キーの押下に対応する入力イベントを読み取ります。デーモンはキー押下を文字に変換し、データベースに保存します。

于 2010-09-16T01:44:11.280 に答える
1

私には考えがありますが、それは非常に一般的です。

別のプログラムのデータを常に監視し、それをバッファリングし、バッファが特定のサイズに達したとき、またはアクティビティなしで特定の期間継続したときに、結果をperlスクリプトにパイプ処理できますか?パイプで接続する場合は、perlスクリプトを変更する必要はありません。これは、引き続きSTDIN上にあるためです。

したがって、次のようになります。

監視プログラム->データの収集->それをPerlプログラムにパイプします

このアイデアがお役に立てば幸いです。

-ブライアンJ.スティナー-

于 2010-09-15T18:53:48.627 に答える
1

cinは、接続されている端末入力デバイスからの入力を読み取ります。ソフトウェアの設計について詳しく知らなくても、私の最初の勘は、Perlスクリプトからデータを読み取ることは設計の最良の選択ではないということです。あなたが説明するように、Perlスクリプトを使用して組み込みLinuxデバイス上のIRリモートを読み取ることができますが、一般に、メインアプリケーション内からハードウェアまたはベンダー提供のAPIと直接インターフェイスします。カードリーダーにAPIが付属していましたか?

マシン(/ dev / *)に接続されたときのカードリーダーのデバイス名は何ですか?私はそれを開いて、そのように読みます。

于 2010-09-15T19:13:00.287 に答える
1

Linuxでこれを扱ったことはありません。ただし、これは私がWindowsで見たものと非常によく似ています。

私の経験では、これらのタイプのデバイスの多くは、オペレーティングシステムによってキーボードタイプのデバイスとして自動的に検出されます。したがって、リーダーからの入力はすべて、実際のキーボードが使用するのと同じキーボードストリームに送られます。これが実際に実行されているプログラムに到達するまでに、カードリーダーがデータを入力しているのか、ユーザーが本当に速く入力しているのかを区別する方法はありません。

結果として、元の質問で説明されている動作が得られます。カードリーダーの入力は、通常のキーボード入力が行われる場所、つまりフォーカスのあるプログラムにのみ行われます。

最善の選択肢は、製造元のWebサイトを調査して(または製造元に連絡して)、プログラムがキーボードストリームとはまったく別にその入力をキャッチできるようなドライバーを提供しているかどうかを調べることです。

メーカーがそのようなものを提供していない場合、おそらく一部のサードパーティが提供しています。しかし、残念ながら、私はそれを調査したことがないので、どこから探し始めるかさえわかりません。

于 2010-09-15T20:50:57.407 に答える