1

我有一个当前从串行端口读取的 ActiveX DLL。现在我希望它接受来自 USB 设备的输入。

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 接收到足够的输入时)。

4

2 回答 2

2

您可以使用RegisterRawInputDevices监视 HID 设备的输入,但这需要一个窗口来侦听WM_INPUT消息,这意味着子类化窗口。

这是一个工作示例项目:UsbBarcodeSanner.zip

于 2013-07-01T14:00:53.290 回答
1

我觉得你有更好的选择

使用 uesr32.dll 您可以轻松完成此任务,

参考这个链接

您将能够使用此功能

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

这个 dll 处理你想要在 Windows 中为用户提供的任何东西.. 参考旧帖子

我希望这个能帮上忙..

于 2013-07-09T04:23:30.040 回答