我有一個條形碼掃描器(就像一個鍵盤),當然我也有一個鍵盤連接到計算機。該軟件正在接受來自掃描儀和鍵盤的輸入。我只需要接受掃描儀的輸入。代碼是用C#編寫的。有沒有辦法從鍵盤「禁用」輸入,只接受來自掃描儀的輸入?如何區分C#中的多個輸入設備
說明: 鍵盤是筆記本電腦的一部分...所以它不能拔掉。此外,我試着把下面的代碼 保護重寫布爾ProcessDialogKey(System.Windows.Forms.Keys keyData) { return true; } 但是,隨着忽略鍵盤的擊鍵,條形碼掃描儀輸入也被忽略。
我不能讓掃描儀發送正面字符,掃描儀正在被其他應用程序使用,並且添加正面字符流意味着要修改其他代碼。
此外,由於掃描的條形碼可能是單字符條形碼,因此我無法使用計時方法來確定輸入是否來自條形碼掃描儀(如果其中一串字符後跟暫停)。
是的,我正在讀取流中的數據。
我想跟着文章:從WinForms中的鍵盤區分條形碼掃描儀。不過,我有以下問題:
- 我收到一個錯誤NativeMethods由於其保護級別而無法訪問。看起來好像我需要導入一個dll;它是否正確?如果是這樣,我該怎麼做?
- 哪個保護覆蓋無效WndProc(ref消息m)定義應該使用,在文章中有兩個實現?
- 我得到一個與[SecurityPermission(SecurityAction.LinkDemand,Flags = SecurityPermissionFlag.UnmanagedCode)]錯誤相關的錯誤CS0246:無法找到類型或名稱空間名稱'SecurityPermission'(您是否缺少using指令或程序集引用? )。我如何解決這個錯誤?如果((從hardwareId中hardwareId其中deviceName.Contains(hardwareId)選擇hardwareId).Count()> 0)錯誤是錯誤CS1026:)期望。錯誤是錯誤的CS1026:)期望。
- 我應該將文章中的所有代碼放在一個名爲BarcodeScannerListener.cs的.cs文件中嗎?
關於C#的解決方案的源代碼後續問題發表尼古拉斯·皮亞塞茨基在http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/:
- 我沒能在VS 2005中打開該解決方案,所以我下載的Visual C#2008 Express版本,並且代碼跑了。但是,在連接我的條形碼掃描儀並掃描條形碼後,程序無法識別掃描。我在OnBarcodeScanned方法中放置了一個斷點,但它從未被擊中。我確實使用設備管理器獲得的條形碼掃描器的ID更改了App.config。似乎有2個設備名與HID#Vid_0536 & Pid_01c1(從掃描儀連接時從設備管理器獲得)。我不知道這是否導致掃描不起作用。當遍歷deviceNames時,下面是我找到的設備列表(使用調試器):
「\?\ HID#Vid_0536 & Pid_01c1 & MI_01#9 & 25ca5370 0000#{4d1e55b2-F16F-11CF-88cb-001111000030} 「
」 \ ?? \ HID#Vid_0536 & Pid_01c1 & MI_00#9 & 38e10b9 0000#{884b96c3-56ef-11D1-bc8c-00a0c91405dd} 「
」 \ ?? \ HID#Vid_413c & Pid_2101 & MI_00#8 & 1966e83d 0000#{884b96c3-56ef-11D1-bc8c- 00a0c914 05dd} 「
」\ ?? \ HID#Vid_413c & Pid_3012#7 & 960fae0 0000#{378de44c-56ef-11D1-bc8c-00a0c91405dd}「
」 \ ?? \根#RDP_KBD#0000 #{884b96c3-56ef-11D1-bc8c-00a0c91405dd} 「 」\ ?? \ ACPI#PNP0303#4 & 2f94427b & 0#{884b96c3-56ef-11D1-bc8c-00a0c91405dd}「 」 \ ?? \根#RDP_MOU #0000#{378de44c-56ef-11D1-bc8c-00a0c91405dd}」 「\ ?? \ ACPI#PNP0F13#4 & 2f94427b & 0#{378de44c-56ef-11D1-bc8c-00a0c91405dd}」
所以有2個條目爲HID#Vid_0536 & Pid_01c1;可能導致掃描不起作用?
好吧,所以我似乎不得不找出一種方法,不依賴於掃描儀發送的ASCII 0x04字符...因爲我的掃描儀不發送該字符。之後,條形碼掃描事件將被觸發並顯示帶有條形碼的彈出窗口。所以謝謝尼古拉斯的幫助。
拔下鍵盤。 – TheTXI 2009-02-25 21:09:16
我在文章底部添加了一個示例代碼發佈。祝你好運! – 2009-02-28 00:11:21
@NicholasPiasecki已經6年了,但仍然 - 爲什麼HTTP 410? – itsho 2015-10-24 21:00:25