我有一个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接收到足够的输入时。)
答案 0 :(得分:2)
您可以使用RegisterRawInputDevices
来监控HID设备的输入,但这需要一个窗口来监听WM_INPUT
消息,这意味着对窗口进行子类化。
以下是一个工作示例项目:UsbBarcodeSanner.zip
答案 1 :(得分:1)