web-dev-qa-db-ja.com

Javaを使用してキーの組み合わせを送信する

この前のリンクのように( キーボード出力の送信方法 )Javaは、Robotクラスを使用して押されたキーをシミュレートできます。ただし、キーの押下の組み合わせはどのようになりますか?シミュレートされましたか?組み合わせ「alt-123」を送信したい場合、これはロボットを使用して可能でしょうか?

11
Muhammad Khan

簡単な答えはイエスです。基本的に、あなたはのkeyPress/Releaseをラップする必要があります Alt 他のkeyPress/Releasesの周り

public class TestRobotKeys {

    private Robot robot;

    public static void main(String[] args) {
        new TestRobotKeys();
    }

    public TestRobotKeys() {
        try {
            robot = new Robot();
            robot.setAutoDelay(250);
            robot.keyPress(KeyEvent.VK_ALT);
            robot.keyPress(KeyEvent.VK_1);
            robot.keyRelease(KeyEvent.VK_1);
            robot.keyPress(KeyEvent.VK_2);
            robot.keyRelease(KeyEvent.VK_2);
            robot.keyPress(KeyEvent.VK_3);
            robot.keyRelease(KeyEvent.VK_4);
            robot.keyRelease(KeyEvent.VK_ALT);
        } catch (AWTException ex) {
            ex.printStackTrace();
        }
    }

}
17
MadProgrammer

Java.awt.Robotを使用してキーの組み合わせを送信する場合、次のコードが適切に機能します

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



public class VirtualKeyBoard extends Robot
{

    public VirtualKeyBoard() throws AWTException
    {
        super();
    }

    public void pressKeys(String keysCombination) throws IllegalArgumentException
    {
            for (String key : keysCombination.split("\\+"))
            {
                try
                {   System.out.println(key);
                    this.keyPress((int) KeyEvent.class.getField("VK_" + key.toUpperCase()).getInt(null));

                } catch (IllegalAccessException e)
                {
                    e.printStackTrace();

                }catch(NoSuchFieldException e )
                {
                    throw new IllegalArgumentException(key.toUpperCase()+" is invalid key\n"+"VK_"+key.toUpperCase() + " is not defined in Java.awt.event.KeyEvent");
                }


            }


    }


    public void releaseKeys(String keysConbination) throws IllegalArgumentException
    {

            for (String key : keysConbination.split("\\+"))
            {
                try
                { // KeyRelease method inherited from Java.awt.Robot
                    this.keyRelease((int) KeyEvent.class.getField("VK_" + key.toUpperCase()).getInt(null));
                } catch (IllegalAccessException e)
                {
                    e.printStackTrace();
                }catch(NoSuchFieldException e )
                {
                    throw new IllegalArgumentException(key.toUpperCase()+" is invalid key\n"+"VK_"+key.toUpperCase() + " is not defined in Java.awt.event.KeyEvent");
                }
            }


    }

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


         VirtualKeyBoard kb = new VirtualKeyBoard();


         String keyCombination = "control+a"; // select all text on screen
         //String keyCombination = "shift+a+1+c"; // types A!C on screen

         // For your case 
         //String keyCombination = "alt+1+2+3";


         kb.pressKeys(keyCombination);
         kb.releaseKeys(keyCombination); 



    }


}
3
Umer Farooq

これは例です

Robot r = new Robot();
Thread.sleep(1000);

r.keyPress(KeyEvent.VK_ALT);
r.keyPress(KeyEvent.VK_NUMPAD1);
r.keyPress(KeyEvent.VK_NUMPAD2);
r.keyPress(KeyEvent.VK_NUMPAD3);            
r.keyRelease(KeyEvent.VK_ALT);

いくつかの特別なキーをリリースすることを忘れないでください、それはあなたのマシンにいくつかのクレイジーなものを作ります

2
user948620

このコードは、ネイティブのWindowsキーボードに近すぎます。 Apiキーボードの「プレス」でさえ、通常ideから押されるのと同じようにEclipseideに組み込まれています。キーは現在デバッグされているアプリケーションから作成されました!! (jdk 1.8、win 7、hp)

0
Tuomas