2013-07-01 64 views
1

我有一個當前從串口讀取的ActiveX DLL。現在我想讓它接受來自USB設備的輸入。VB6 - 從ActiveX DLL中的鍵盤讀取

USB設備作爲標準的人機界面設備。也就是說,如果我打開記事本,那麼設備的輸出將顯示在記事本中,就像它在鍵盤上輸入一樣。通常情況下,我會捕獲Key Up/Down事件,但我認爲我需要一個表單,而我的DLL沒有表單。

如何捕獲該輸入?


[更新]我發現這個http://us.generation-nt.com/answer/anyone-know-how-read-keyboard-input-within-an-activex-dll-help-7934442.html#聲稱這樣做,但不會因爲就是工作代碼使用AddressOf運營商,這隻能在.BAS文件中使用,所以不會在DLL .CLS

我甚至不確定我是否在尋找系統範圍的鉤子或應用程序特定的。

嗯,http://www.xtremevbtalk.com/showthread.php?t=77216說:「你不能在VB中實現一個全局的WH_KEYBOARD掛鉤 - 它需要一個標準的(非ActiveX dll),因爲它必須被加載到所有正在運行的應用程序的地址空間中。


[上日期]所以,也許我可以在形式,使它的1x1像素和無形的,有一個功能GetTheData其顯示形式模態,並收集並返回數據 - 無論是獲取鍵盤輸入的形式,水平或轉換成(n不可見)控件,然後關閉返回輸入的表單。

會這樣嗎?如果任何人發佈了一個工作示例,我將獎勵賞金(我寧願表單在任務欄上不可見並且沒有關閉按鈕;用戶不應該意識到它,或者能夠關閉它,它應該關閉它自己當它從USB連接的HDI接收到足夠的輸入時)。

+2

可以在一個ActiveX DLL有.BAS模塊太多,不僅.CLS類模塊。你也可以有.frm表單模塊。 – wqw

+0

@wqw,我是VB新手,能否請您提供更多幫助(並查看我更新的問題)?謝謝 – Mawg

+0

我一直對那些說VB6是新手的人感到驚訝。我的意思是,自從2001年左右起它就沒有被微軟出售過! Mawg - 你從哪裏得到你的副本?我不介意爲了舊時代而買一個! –

回答

2

您可以使用RegisterRawInputDevices來監視HID設備的輸入,但這需要一個窗口來偵聽WM_INPUT消息,這意味着子類化窗口。

這裏是一個工作示例項目:UsbBarcodeSanner.zip

+0

感謝+1發佈。我會檢查你的代碼,如果是炒鍋,就給予答案。我希望我可以使窗口(窗體?)看不見,沒有控件和1x1像素。如果不是這樣,我想這隻能說「讀數據」,但串行版本後沒有窗我不想迷惑用戶。我想知道如果我可以從'stdin'閱讀(燁,我不知道這是在Unix/Linux的東西),或者也許'ShellExecute'東西。順便說一下,你的窗口必須模態顯示,以確保獲得輸入? – Mawg

+0

對不起,但我不清楚如何使用ActiveX DLL使用。可能是因爲我是VB6的新手。 – Mawg

+1

該示例是否適用於您的USB掃描儀? – wqw

1

我覺得你有更好的選擇,

使用uesr32.dll您可以輕鬆地做這個任務,

請參閱本

你將能夠使用此功能

Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer

這個DLL處理任何你想要的用戶在Windows ..指Old Post

我希望這將有助於..

+0

+1,謝謝,這不完全是我想要的,但它是有用的知道。謝謝 – Mawg

+0

在這種情況下,我認爲你正在處理一些使用USB的硬件?或者想要一個關鍵筆畫閱讀器?或其他東西.. – MarmiK

+0

在硬件的情況下,您可以使用USB到串行橋(虛擬),這是在大多數移動數據連接解決方​​案(除了Android)可用..這裏是一個驅動程序的例子參考此鏈接http:// www.pjrc.com/teensy/usb_keyboard.html應該幫助:)或使用'WINUSB' http://msdn.microsoft.com/en-us/library/windows/hardware/ff540174(v=vs.85)。 aspx這是一個偉大的工作,由它自己.. – MarmiK