Не удается открыть блокнот в AutoIt с Java

Здесь я пытаюсь открыть блокнот в AutoIt с Java. Однако я не могу открыть его с помощью следующего кода.

public class Notepad {
    public static String jvmBitVersion() { //returning the JVM Version
        return System.getProperty("sun.arch.data.model");
    }

    public static void main(String[] args) throws InterruptedException {
        String jacobDllVersionToUse;
        System.out.println("JVM version is: " +jvmBitVersion());

        if (jvmBitVersion().contains("32")) {   //Checking for the JVM Version
            jacobDllVersionToUse = "jacob-1.18-M2-x86.dll"; // If the version is 32- bit use this.
        }
        else { // enter code here
            jacobDllVersionToUse = "jacob-1.18-M2-x64.dll"; // if the version is 64-bit go for this
        }

        File file = new File("lib", jacobDllVersionToUse); // file location for jacob
        System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());

        AutoItX x = new AutoItX();
        x.run("notepad.exe"); // trying to open the notepad

        x.winActivate("Untitled - Notepad"); // waiting for the notepad to open
        x.winWaitActive("Untitled - Notepad");

        x.send("This is some text"); // Once the notepad is open write into it.

    }
}

Если вместо notepad.exe я даю calc.exe, он работает нормально. Если я открываю блокнот вручную после запуска, это код, который записывается в блокнот.


person Anubhav Mishra    schedule 13.04.2016    source источник


Ответы (3)


Запуск блокнота сразу же shown решит эту проблему.

Блокнот

AutoItX x = new AutoItX();
x.run("notepad.exe", "", AutoItX.SW_SHOW);
x.winActivate("Untitled - Notepad");
x.winWaitActive("Untitled - Notepad");
x.send("This is some text");

Notepad++

AutoItX x = new AutoItX();
x.run("C:\\Program Files (x86)\\Notepad++\\notepad++.exe");
x.winActivate("[CLASS:Notepad++]");
x.winWaitActive("[CLASS:Notepad++]");
x.send("This is some text");
person SubOptimal    schedule 13.04.2016
comment
@AnubhavMishra Я обновил свой ответ примером для Notepad++. - person SubOptimal; 14.04.2016

Попробуйте полный путь:

x.run("C:\Windows\System32\notepad.exe")

И я бы использовал другой порядок для ваших команд ожидания, потому что вы не можете активировать окно, которого «не существует», и было бы разумнее активировать окно перед использованием команд send (). Правильный порядок будет такой:

x.winWaitActive("Untitled - Notepad");

x.winActivate("Untitled - Notepad");
x.send("This is some text");

Вы также можете использовать только WinWait()

person IkeRoyle    schedule 13.04.2016

Этот код работает для меня:

AutoItX x = new AutoItX();
x.run("notepad.exe", "C:/Windows/System32/", AutoItX.SW_SHOW); // trying to open the notepad

x.winActivate("Sin título: Bloc de notas"); // waiting for the notepad to open
x.winWaitActive("Sin título: Bloc de notas");
x.send("This is some text"); // Once the notepad is open write into it.

Обратите внимание, что заголовок окна должен соответствовать приложению Windows. В моем случае Windows на испанском языке и заголовок «Sin título: Bloc de notas».

person Alberto    schedule 13.04.2016