0

私は、既存の POS プログラムのコンパニオン アプリケーションを開発する初期段階にあります。基本的に、ピンパッドのような機能を探しています。Targus USB 数字キーパッドがあり、お客様がこれを使用して PIN 番号を入力できるようにしたいと考えています。(これは支払いシステムではなく、顧客アカウントの確認のみです)。メインの POS プログラムは実行されますが、アプリケーションをバックグラウンドで実行し、PIN が入力されるのを待ってから認証する必要があります。

考えられる解決策 #1: VID と PID によって USB HID デバイスに対応するコード プロジェクトからサンプル プロジェクトをダウンロードしました。これは完璧ですが、キーボードは何らかの方法で Windows によって保護されており、この方法ではアクセスできません。Windows でキーパッドを「予約解除」して、HID デバイスのままにする方法はありますが、キーボードとしては表示されませんか?

考えられる解決策 #2: キーボード フックのサンプルがありますが、キーパッドの出力が引き続き POS アプリケーションに送られるため、これらも機能しません。どのプログラムにフォーカスがあるかに関係なく、バックグラウンド アプリケーションにのみ移動するキーパッド出力が必要です。特定のキーボードから特定のアプリケーションに出力をリダイレクトする方法はありますか?

これは、遠隔地にある 100 以上の POS 端末に展開されるため、ウィンドウの再構成を必要としないソリューションが望ましいでしょう。また、C# .NET 2.0 である必要があります

4

2 に答える 2

2

私は一度、POSソリューションのためにこの橋を渡りました。キーストロークはキーストロークであり、単純で単純なキーストロークであることがわかりました。独自のデバイスドライバーを作成せずに、これを実現する方法を見つけることができませんでした。

したがって、私たちのアプローチは、顧客がPINを入力するのを待っている間、レジ係の入力アクセスを無効にすることでした。

それはあなたが聞きたかった答えではないことを私は知っていますが、それは私が経験を通して見つけたものです。

編集:探求する何か...COMポートを直接扱うことは非常に簡単です。USBデバイスではなく、COMキーパッドデバイスを検討することもできます。これにより、デバイスの出力をより細かく制御できます。COMはかなり古い技術であり、これらのポートを備えたPOSマシンを見つけるのは難しいかもしれません。これは私たちにとって選択肢ではなかったので、私たちはそれを探求しませんでした。

于 2012-12-17T23:28:31.053 に答える
1

最良の選択肢は、ジョイスティック「キーボード」を購入して、デバイス (USB HID) を非キーボード/非マウスとして読み取ることができるようにすることです (キーボードとマウスは OS によって制限されており、ハードコードされているためバイパスできません)。デバイス管理に移動します。)

私がお勧めするのは、キーボードがジョイスティックとして登録できる PI Engineering のキーボードを探すことです。彼らは、デバイスでキーを押すことをシミュレートして、Windows メッセージング キューでキーを送信する (キーボードをシミュレートする) カスタム マッピング ソフトウェアを持っています。代わりに、SDK を使用してデバイスに対して直接プログラムするだけで (各キーは単なるジョイスティック ボタンであるため)、POS ソフトウェアに干渉することはありません。

PI Engineering プログラマブル キーボード

USB アクセスの説明(リンクが切れた場合に関連するセクションを以下に示します)

マイクロソフトウィンドウズ

Windows ドライバー開発キット HID

Windows DDK HID API は、USB HID を厳密に反映する複雑で低レベルの API であるという点で、Apple HID マネージャーに似ています。プログラムは、Microsoft がこの API から意図的にブロックしたキーボードとマウスを除いて、入力と出力の両方のほぼすべてのデバイスにアクセスできます。これまでに説明した他の API とは異なり、読み取りメカニズムの性質上、キューからイベントを読み取る専用のスレッドがないと使用するのは非常に困難です。この API を使用するには、一見 Microsoft の Driver Development Kit を購入する必要があるように見えますが、無料の MinGW ツールで使用することができます。

Windows では、デバイスのプラグおよびアンプラグ イベントの通知がウィンドウ ハンドルに送信されるため、通知を受信するには、hidio オブジェクトに通知を受信できる独自の (非表示の) ウィンドウが必要です。現在の実装では、このような通知を受け取ると、オブジェクトは自動的にデバイス リストを再構築します。さらに、デバイスが現在開いている場合は、デバイスがまだ接続されているか、削除されたかを確認します。

直接入力

Microsoft の DirectInput API は、比較的単純なインターフェイスを提供しますが、柔軟性が犠牲になります。USB HID デバイス タイプのサポートは限定されており、主に最も一般的なゲーム デバイスを対象としています。USB HID で言えば、「汎用デスクトップ ページ」のみをサポートします。マウスとキーボードのデータへのアクセスは提供しますが、個々のデバイスとしては提供しません。複数のマウスまたはキーボードが接続されている場合、すべてのデータが 1 つの仮想デバイスにまとめられます。フォース フィードバックはサポートしていますが、他の出力タイプはサポートしていません。Linux の input.h と同様に、独自の単純化されたイベント スキームがあり、受信データの一部を自動的にスケーリングするため、問題が発生する可能性があります。

Windows 生入力

Raw Input は、キーボードとマウスへの生のアクセスを取得したいという開発者の要望に応えて提供された Windows XP の新しい API です。これは、Windows でマウスとキーボードから生データを取得する唯一の方法です。Raw Input を使用すると、任意の USB HID デバイスの入力イベントを取得できますが、出力はまったくサポートされていません。このため、Raw Input についてはまだ詳しく調べていませんが、Windows でキーボードとマウスを完全にサポートするために使用する予定です。

于 2012-12-17T23:45:52.003 に答える