【问题标题】:Unable to launch cmd or notepad using Autoit in Java无法在 Java 中使用 Autoit 启动 cmd 或记事本
【发布时间】:2016-04-28 21:05:48
【问题描述】:

您好,我在使用 autoitx4java 的 Java 程序中使用 AutoIt。以下是我正在使用的代码:

import java.io.File;

import autoitx4java.AutoItX;

import com.jacob.com.LibraryLoader;

public class MyTest {

    public static void main(String[] args) throws InterruptedException{
        // TODO Auto-generated method stub
        String jacobDllVersionToUse;
        if (jvmBitVersion().contains("32")){
        jacobDllVersionToUse = "jacob-1.18-x86.dll";
        }
        else {
        jacobDllVersionToUse = "jacob-1.18-x64.dll";
        }

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

        AutoItX x = new AutoItX();
     // System.out.println(file.getAbsolutePath());
        x.run("cmd.exe");


    }

    private static String jvmBitVersion() {
        // TODO Auto-generated method stub
        System.out.println(System.getProperty("sun.arch.data.model"));
        return System.getProperty("sun.arch.data.model");

    }

}

当我运行这个程序时,什么也没有发生,也没有错误。如果我用 notepad.exe 替换 cmd.exe,也会发生这种情况。 但是,当我用 calc.exe 替换 cmd.exe 时,计算器会启动。

我是 AutoIt 的新手,并使用以下链接使用 Java 设置 AutoIt:

http://www.joecolantonio.com/2014/07/02/selenium-autoit-how-to-automate-non-browser-based-functionality/

【问题讨论】:

  • 也许您应该检查的是操作系统架构而不是 JVM 架构。毕竟,您可以在 64 位操作系统上运行 32 位 JVM。强制您的代码使用 64 位 DLL,如果这不起作用,则强制使用 32 位 DLL,如果这不起作用,则尝试提供 cmd.exe 的显式路径,看看是否有区别。

标签: java selenium autoit


【解决方案1】:

这可能是运行找不到 cmd 和记事本,如果它在错误的路径中查找,可能是 32/64 位问题。或者进程已启动但窗口不可见,请检查进程是否在任务管理器中运行。

Run 不会给出错误,但它会返回“0 并将@error 设置为非零”。如果成功,它将返回“已启动进程的 PID” https://www.autoitscript.com/autoit3/docs/functions/Run.htm

要查看它是否成功,试试这个,看看它是否返回一个 pid:

MsgBox(0, "test", run("cmd.exe"))

如果它返回 0,则可能意味着未找到该程序。尝试完整的文件路径,例如:

MsgBox(0, "test", run("cmd.exe", "C:\Windows\System32\"))

如果返回 pid 并且进程正在运行,但您没有看到任何窗口,请尝试添加 @SW_SHOW 标志:

run("cmd.exe", "", @SW_SHOW)

【讨论】:

    【解决方案2】:

    run("cmd.exe", "", @SW_SHOW) 成功了!

    【讨论】:

      【解决方案3】:

      您好打开记事本,您可以使用以下代码。因为这对我有用。

          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");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-08
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-28
        • 1970-01-01
        相关资源
        最近更新 更多