在以Windows服务运行的Java程序中生成键盘输出
我创建了一个简单的独立Java应用程序(JAR),该应用程序通过虚拟COM端口连接霍尼韦尔条形码扫描仪(使用RxTx库来设置COM连接). 连接后,程序将接收来自扫描仪的输入,使用一些自定义逻辑对其进行转换,最后使用Robot类将转换后的输出重定向到标准输出.没什么复杂的. 因此,如果我运行该程序然后扫描值“ A”,则应用程序会将其转换为“ B”,并且当记事本处于活动状态(或其他一些输入字段/程序)时,将输出“ B”,就像它最初被扫描一样由扫描仪. 当以jar文件(或包装bat文件)运行时,该程序可以完美运行.但是,当将此JAR / BAT文件包装为Windows服务时(使用JSW Community Edition或YAJSW),该程序将正常运行,但不会输出Robot.class执行的“模仿”键击. 我什至使用带有sendInput()方法的JNA库(代替Robot类)来创建尽可能接近操作系统级别的击键,但这也行不通…我也尝试使服务interactive但这也没有用.目前,我已经没有选择了. 所以我的问题是:作为Windows服务运行时,您不能生成键盘按下事件是否正确?我可以想象这可能是一个很大的安全问题,因此可能是不允许的. 任何反馈或可能的解决方案将非常欢迎!提前谢谢了! 最佳答案
这是一个称为会话0隔离的规范,是Windows Vista引入的.
充当WindowsService的程序没有用户界面. 请参考这些文章和文件. Application Compatibility – Session 0 Isolation What is Session 0 Isolation? What do I need to know about it? 此外 在这种情况下,除非它是“仅在用户登录时运行”,否则它可能无效. 但是,即使您这样做,也有可能无法使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |