【问题标题】:Transform RS232 input into keyboard events in windows将 RS232 输入转换为 Windows 中的键盘事件
【发布时间】:2011-06-10 22:45:45
【问题描述】:

我需要将键盘事件注入操作系统(windows)。

总体情况是我需要将 RS232 设备(类似于条形码扫描仪)转换为“usb 键盘模拟设备”。有一个控制 rs232 设备的后台应用程序,一旦它接收到数据,数据应该被转换为键盘事件,以便由活动应用程序(即销售点应用程序)接收。

我知道如何使用 Windows 挂钩捕获事件,但我不确定新事件是否可以排队进入系统以及如何完成。

想法?

【问题讨论】:

    标签: windows keyboard hook inject


    【解决方案1】:

    为什么不将串行端口条目捕获为事件并重新发出密钥 the SendKeys class ?驱动程序的编写/测试相当复杂(错误的驱动程序可以关闭 BSOD) 你打算用什么语言来做?

    【讨论】:

    • 我的自然语言是 Java,但我不确定是否可以在不与本机库进行复杂集成的情况下在 Windows 中完成。幸运的是,解决方案毕竟不是那么困难,在 java -Robot- 中有一个等效的 SendKeys,并且串行驱动程序在 Java 中已经完成了一半。最后,一切归结为正常创建驱动程序,转换 rs232 输入并使用 Robot 类将关键事件发送到活动应用程序。谢谢
    • 如果有人感兴趣,该项目的另一部分是挂钩键盘事件以启动/停止消息传入。同样,使用 jintellitype 库很简单。 melloware.com/products/jintellitype/index.html
    【解决方案2】:

    如果我没有正确回答您的问题,您可能想在这里查看SendInput(...)http://msdn.microsoft.com/en-us/library/ms646310(v=vs.85).aspx

    由于你没有指定语言,我假设是 C。

    例如:

        INPUT inp;
    
        memset(&inp, 0, sizeof(INPUT));
        inp.type = INPUT_KEYBOARD;
        inp.ki.wVk = VK_ESCAPE;
        SendInput(1, &inp, sizeof(INPUT)); //send keyDown Event
        inp.ki.dwFlags = KEYEVENTF_KEYUP;
        SendInput(1, &inp, sizeof(INPUT)); //send KeyUp Event
    

    【讨论】:

      【解决方案3】:

      您可能应该开始研究 BlockInput/SendInput。

      这些是在我制作我的应用程序之后出现的。我使用 PostMessage 将 WM_KEYDOWN/WM_KEYUP 消息发布到活动窗口。这是有效的,但有各种各样的问题。 (例如,你必须设置键盘 shift 状态才能做大写。Thunderbird 要求你慢慢发送退格键。)

      【讨论】:

        猜你喜欢
        • 2017-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-28
        • 1970-01-01
        • 2015-08-01
        • 2013-03-21
        • 1970-01-01
        相关资源
        最近更新 更多