2014-09-18 4 views
3

Я пытаюсь имитировать нажатие клавиши с кодом ниже. Когда я открываю блокнот, он отлично работает, но когда я открываю игру, в которой я хочу ее использовать, она ничего не делает. Так что нажатия клавиш не работают. Я попытался имитировать движение мыши и щелчки, эти действия действительно работают. Кто-нибудь знает, как решить эту проблему?java.awt.Robot внутри игр?

Я нашел этот вопрос, How can I use java.awt.Robot inside games?, но я не могу добавить комментарий или еще что-нибудь.

package MyProject; 

import java.awt.AWTException; 
import java.awt.Robot; 
import java.awt.event.KeyEvent; 

public class KeyStroke { 

    public static void main(String[] args) throws AWTException { 

     Robot robot = new Robot(); 

     robot.delay(3000); 

     robot.keyPress(KeyEvent.VK_Q); 
     robot.keyPress(KeyEvent.VK_W); 
     robot.keyPress(KeyEvent.VK_E); 
     robot.keyPress(KeyEvent.VK_R); 
     robot.keyPress(KeyEvent.VK_T); 
     robot.keyPress(KeyEvent.VK_Y); 

    } 

} 
+0

вы можете показать, как вы пытались имитировать нажатие клавиши? –

+0

awt.Robot требуется видимый Контейнер верхнего уровня – mKorbel

+0

Взгляните на это: http://stackoverflow.com/questions/5282588/how-can-i-bring-my-application-window-to-the-front –

ответ

4

Вы, вероятно, хотите, чтобы нажать и отпустить клавиши для имитации нажатия клавиш, то есть ваш текущий код не будет удерживать нажатой Q, W, E, R, T и Y, пока отпуску срабатывает. Кроме того, вы можете удерживать их в течение небольшого промежутка времени, потому что это вызвало некоторые проблемы для меня, когда я сделал что-то вроде этого.

Код:

package MyProject; 

import java.awt.AWTException; 
import java.awt.Robot; 
import java.awt.event.KeyEvent; 

public class KeyStroke { 
    private static Robot robot; 

    public static void main(String[] args) throws AWTException { 
     robot = new Robot(); 
     robot.delay(3000); 
     keystroke(KeyEvent.VK_Q); 
     keystroke(KeyEvent.VK_W); 
     keystroke(KeyEvent.VK_E); 
     keystroke(KeyEvent.VK_R); 
     keystroke(KeyEvent.VK_T); 
     keystroke(KeyEvent.VK_Y); 
    } 

    private static void keystroke(int key) { 
     robot.keyPress(key); 
     robot.delay(100); // hold for a tenth of a second, adjustable 
     robot.keyRelease(key); 
    } 
} 
+0

Ow sorry, этот код - это просто вещь, которую я пробовал, также попробовал KeyPress/Release, но это не имело значения. Ваш второй комментарий о том, чтобы удерживать его на небольшом количестве времени, исправил мою проблему. Большое спасибо!! – PHPeter

+0

@PHPeter Вы можете принять мой ответ, если он решил вашу проблему, нажав на контур тика. – bcsb1001

-1

В противоположность выше - , где вы добавить свой ключ слушателя ???

public class BetaTest { 

    public static void main (String[] args){ 
     new BetaTest().startUp(); 
    } 


    private void startUp() { 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 

     final KeyAdapter ka = new KeyAdapter() { 

      @Override 
      public void keyPressed(KeyEvent e) { 
       super.keyPressed(e); 
       System.out.println("key pressed"); 
      } 

     }; 

     frame.addKeyListener(ka); 

     Runnable r = new Runnable() { 

      @Override 
      public void run() { 
       try { 
        Thread.sleep(1000); 
        KeyEvent ke = new KeyEvent(frame, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, KeyEvent.VK_A, 'a'); 
        ka.keyPressed(ke); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     Thread t = new Thread(r); 
     t.setDaemon(true); 
     t.start(); 

    } 

}

и выход сюрприз

key pressed 
+0

OP не хочет иметь ничего общего с прослушиванием или размахом - просто 'java.awt.Robot'. – bcsb1001

+0

ну ... вы можете подумать, что я ошибаюсь, но первое предложение: «Я пытаюсь имитировать нажатие клавиши с помощью кода ниже». и позже «Кто-нибудь знает, как исправить эту проблему» ... я не понимаю, как это неправильно касается вопроса ... даже при запросе разъяснений ответа не было получено ... –

+0

Я не знаю вы, но для меня кажется совершенно очевидным, что ** имитация ** нажатие клавиши - это не то же самое, что ** слушать ** нажатие клавиши. Кроме того, код специально показал попытку использования 'java.awt.Robot' - полностью не связанного с вашим« решением ». Кроме того, я совершенно прав, потому что у меня есть принятый ответ. Так что да, я думаю, вы ошибаетесь. – bcsb1001

Смежные вопросы