Java:将机器人模拟按键限制在应用程序本身

Java:将机器人模拟按键限制在应用程序本身,java,jframe,awt,keyevent,Java,Jframe,Awt,Keyevent,大家好, 我想了解如何将所有机器人模拟按键和鼠标移动限制在应用程序本身。我目前正在做一个小项目,为谷歌音乐创建一个音乐播放器 我可以在执行机器人代码之前使窗口聚焦,但这会导致系统托盘中的音乐播放器有太多的搭扣,并且会使游戏窗口设置为全屏 private void Play(){ try { Robot robot = new Robot(); robot.keyPress(32)

大家好,

我想了解如何将所有机器人模拟按键和鼠标移动限制在应用程序本身。我目前正在做一个小项目,为谷歌音乐创建一个音乐播放器

我可以在执行机器人代码之前使窗口聚焦,但这会导致系统托盘中的音乐播放器有太多的搭扣,并且会使游戏窗口设置为全屏

private void Play(){
        try {                           
            Robot robot = new Robot();
            robot.keyPress(32);
            robot.keyRelease(32);   
        } catch (AWTException e) {          
            e.printStackTrace();
        }
    }
这是当前要播放/暂停的机器人代码。它目前正在模拟按下空格键

部分解

frame.dispatchEvent(new KeyEvent(Component, KeyEvent.KEY_TYPED, 0, 0, KeyEvent.VK_UNDEFINED, char Action)); // Component you want the key press to go

将关键事件直接分派到文本组件。帧不需要有焦点才能工作

text.dispatchEvent(new KeyEvent(text,
                                KeyEvent.KEY_TYPED, 
                                0,
                                0,
                                KeyEvent.VK_UNDEFINED, 
                                'H'));
如果要从EDT执行此操作,请使用invokeLater进行设置:

java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
        text.dispatchEvent(new KeyEvent(text,
                                KeyEvent.KEY_TYPED, 
                                0,
                                0,
                                KeyEvent.VK_UNDEFINED, 
                                'H'));
    }
});

你能再解释一下吗?我正在尝试代码,似乎无法理解它是如何工作的。您需要公开您想要接收关键事件的文本组件-在上面的示例中,这是
text
。如果有混淆,很抱歉,但我不想从用户处获得输入。我试图在java窗口本身中输出空格键,而不关注窗口。这就是代码所做的-它的行为类似于Robot类,但不是针对当前关注的窗口,而是针对特定组件。您发送的KeyEvent是由您的代码创建的,而不是由用户输入的。哦,呃,我想这是有道理的。你能帮我安装吗?这是我第一次使用这种方法。this.dispatchEvent(this,KeyEvent.KEY_类型,0,0,KeyEvent.VK_未定义,'H');//将我的类扩展为JFrame,使第一个KeyEvent变为KeyEvent.VK_SPACE以模拟被按下的第一个0的空间保持不变,第二个保持不变,然后第二个KeyEvent保持不变??显然,在末尾有一个字符会破坏分派方法。格式化空间的粘贴箱: