2012-12-17 55 views
0

我正在開發配套應用程序到現有POS程序的初始階段。基本上我正在尋找像鍵盤功能。我們有一個Targus USB數字鍵盤,並希望客戶輸入PIN碼。 (這不適用於支付系統,只是客戶帳戶驗證)。主要的POS程序將運行,但我需要我的應用程序在後臺運行並等待輸入PIN碼,然後才能進行身份驗證。從第二個鍵盤重定向鍵盤輸入

可能的解決方案#1: 我從Code Project下載了一個示例項目,該項目通過VID & PID解決USB HID設備問題。這將是完美的,但鍵盤有點受到Windows的保護,不能以這種方式訪問​​。有沒有辦法在Windows中「卸載」鍵盤,使其仍然是HID設備,但不能將其視爲鍵盤?

可能的解決方案#2: 有一些鍵盤鉤子樣本,但是這些不會工作,因爲鍵盤輸出仍然會去POS應用程序。無論程序有什麼焦點,我都需要鍵盤輸出才能進入我的後臺應用程序。有沒有辦法將輸出從一個特定的鍵盤重定向到特定的應用程序?

這將推出到遠程位置的100多個POS終端,因此不需要重新配置窗口的解決方案將是更可取的。它也需要在C#.NET 2.0中

回答

1

您最好的選擇是購買操縱桿「鍵盤」,以便您可以將設備(USB HID)作爲非鍵盤/非鼠標讀取(因爲鍵盤和鼠標受操作系統限制,無法旁路因爲它被硬編碼到設備管理中。)

我推薦的是看PI Engineering的鍵盤,因爲他們的鍵盤可以註冊爲遊戲杆。他們有自定義映射軟件,可以模擬按下設備上的按鍵以在Windows消息隊列中發送密鑰(模擬鍵盤)。相反,您只需使用SDK直接對設備進行編程(因爲每個鍵只是一個操縱桿按鈕)並且不會干擾POS軟件。

PI Engineering Programmable Keyboards

USB access description(下面列出的相關部分情況下,鏈接死亡)

的Microsoft Windows

Windows驅動程序開發工具包HID

在Windows DDK HID API是像Apple HID Manager那樣是一個複雜的低級別API它鏡像USB HID。除了鍵盤和鼠標外,程序可以訪問或多或少的每個設備,包括輸入和輸出,微軟故意阻止使用此API。與迄今爲止涉及的其他API不同,閱讀機制的本質使得使用它非常困難,而沒有專用於從隊列中讀取事件的線程。乍一看,爲了使用此API可能需要購買微軟的驅動程序開發工具包,可以將其與免費的MinGW工具一起使用。

在Windows中,設備插入和拔下事件的通知被髮送到窗口句柄,因此爲了接收它們,hidio對象需要它自己的(不可見的)窗口,然後窗口可以接收通知。在當前的實現中,對象在接收到這樣的通知時自動重建設備列表。此外,如果設備當前處於打開狀態,則會檢查設備是否仍連接或已被移除。

的DirectInput

微軟的DirectInput的API提供了一個相對簡單的接口,但在靈活性爲代價的。它對USB HID設備類型的支持有限,主要針對最流行的遊戲設備;在USB HID中,它只支持「通用桌面頁面」。它確實提供對鼠標和鍵盤數據的訪問,但不是作爲單獨的設備。如果連接了多個鼠標或鍵盤,則將所有數據集中到一個虛擬設備中。它支持強制反饋,但不支持任何其他輸出類型。像Linux input.h一樣,它有自己簡化的事件方案,並且還自動縮放一些輸入數據,這可能會造成問題。

Windows原始輸入

原始輸入是一個新的API,與Windows XP的這是在迴應開發商的願望,讓鍵盤和鼠標的原始訪問提供。這是在Windows上從鼠標和鍵盤獲取原始數據的唯一方法。通過原始輸入,可以獲取任何USB HID設備的輸入事件,但根本不支持輸出。由於這個原因,我們還沒有深入探索Raw Input,但我們可能會使用它來完全支持Windows上的鍵盤和鼠標。

+0

PI產品看起來很有希望,非常感謝。 – Kerberos42

+0

我想沒有辦法告訴Windows鍵盤只是一個HID設備,而不是專門的鍵盤? – Kerberos42

+0

不,這是不可能的。 –

1

我穿過這個橋樑的POS解決方案一次。我發現擊鍵是擊鍵是簡單而簡單的擊鍵。沒有編寫自己的設備驅動程序,我無法找到一種方法來實現這一點。

因此,我們的方法是簡單地禁止收銀員的輸入訪問,同時等待客戶輸入他們的銷,反之亦然,當收銀員應該有輸入訪問,而不是客戶。

我知道這不是你想聽到的答案,但它是我通過經驗找到的答案。

編輯: 有待探索...直接處理COM端口非常容易。您可以考慮使用COM鍵盤設備,而不是USB設備。這會讓您更好地控制設備的輸出。 COM是一個非常古老的技術,發現這些端口的POS機可能很難。這不是我們的選擇,所以我們從來沒有探索過它。

+0

感謝您的建議,除了上面的PI產品鏈接,我已經開始考慮實際的支付Pin pad,這些USB和COM口味,但我不知道他們是如何編程的LCD顯示屏以及所需的加密級別。 – Kerberos42