VB6-从ActiveX DLL中的键盘读取



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

USB设备起到标准人机接口设备的作用。也就是说,如果我打开Notepad,那么设备的输出将显示在Notepad中,就像在键盘上键入一样。

通常情况下,我会捕捉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接收到足够的输入时,它应该关闭自己)。

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

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

我认为你有更好的选择,

使用uesr32.dll,你可以很容易地完成这项任务,

请参阅此链接

你将能够使用这个功能

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

此dll可处理您希望用户在windows中执行的任何操作。。参考旧的后

我希望这会有所帮助。。

最新更新