Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中模拟按键,将用户输入写入另一个应用程序_Java_Awt_Awtrobot_Virtual Keyboard - Fatal编程技术网

在java中模拟按键,将用户输入写入另一个应用程序

在java中模拟按键,将用户输入写入另一个应用程序,java,awt,awtrobot,virtual-keyboard,Java,Awt,Awtrobot,Virtual Keyboard,我正在开发一个虚拟键盘应用程序。除了我写的东西被写进当前的应用程序而不是后面运行的应用程序之外,一切都很好 我觉得这是因为java中的ROBOT类只适用于创建它的应用程序上下文 这有什么办法吗 下面是代码,我正试图在java应用程序后面的终端中编写ls: Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_ALT); robot.keyPress(KeyEvent.VK_TAB);

我正在开发一个虚拟键盘应用程序。除了我写的东西被写进当前的应用程序而不是后面运行的应用程序之外,一切都很好

我觉得这是因为java中的ROBOT类只适用于创建它的应用程序上下文

这有什么办法吗

下面是代码,我正试图在java应用程序后面的终端中编写ls

        Robot robot = new Robot();

        robot.keyPress(KeyEvent.VK_ALT);
        robot.keyPress(KeyEvent.VK_TAB);
        robot.keyRelease(KeyEvent.VK_TAB);
        robot.keyRelease(KeyEvent.VK_ALT);

        robot.keyPress('l');
        robot.keyRelease('l');
        robot.keyPress('s');
        robot.keyRelease('s');

        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);
从中可以看出,
Robot
类能够将击键发送到外部应用程序-但它们将到达
最上面的窗口
,因此您基本上需要关注希望将击键发送到的窗口,似乎有各种解决方案,我猜这是最简单的:

:

或者,您可以编写一个VBScript来激活另一个VBScript 应用例如:

然后使用Java应用程序中的Runtime.exec执行脚本


当我知道下一个应用程序是什么时,你提到的例子就可以了。但是在我的例子中,我想用这个应用程序来代替普通的物理键盘。所以我应该能够像普通键盘一样导航和打字。在这种情况下,你不需要做任何事情,而这个问题是无效的,因为虚拟键盘正是这样做的——它向最顶层的应用程序发送击键,而不发送其他内容。顺便说一句:“下一个应用程序是什么”没有任何意义。在任何类型的操作系统中都没有“下一个”,只有图形窗口的Z索引,具有最高Z值的窗口接收广播事件。这就是现代操作系统的工作原理。你在寻找这样的东西吗?
Set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.AppActivate("Firefox")