VB6 - 从ActiveX DLL中读取键盘

时间:2013-07-01 03:48:47

标签: dll vb6 hid

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我认为你有更好的选择,

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

参考此link

您将能够使用此功能

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

此dll会在Windows中处理您想要的任何内容..请参阅Old Post

我希望这会有所帮助..