windows 从Java运行autohotkey(ahk)脚本

disbfnqx  于 2023-10-22  发布在  Windows
关注(0)|答案(3)|浏览(180)

有没有一种方法来运行一个脚本与参数从java?不是可执行文件,而是AutoHotKey脚本。
我试过这个,但因为它不是一个有效的可执行文件,它不工作。
控制类:

package org.bsep.acp;

import java.io.IOException;

/**
 * This class allow you to send string to your
 * computer as keystrokes.
 * 
 * escape car is '
 * special char are {space}, {Enter}, {F1}, {F2}, etc
 * 
 * @author Eildosa
 */
public class StringSender {

    Runtime runtime;
    private final static String AHK_BRIDGE = "C:\\perso\\WorkspaceScripts\\skyrimTools\\src\\org\\bsep\\acp\\ahkBridge.ahk";

    public StringSender() {
        runtime = Runtime.getRuntime();
    }

    public void sendString(String data) throws IOException, InterruptedException {
        runtime.exec(new String[] { AHK_BRIDGE, data} );
        Thread.currentThread();
        Thread.sleep(1000);
    }

}

测试:

Runtime runtime = Runtime.getRuntime();
runtime.exec(NOTEPAD);
Thread.currentThread();
Thread.sleep(4000);
StringSender stringSender = new StringSender();
stringSender.sendString("Writing from java through AHK.");

例外情况:

Exception in thread "main" java.io.IOException: Cannot run program "C:\perso\WorkspaceScripts\skyrimTools\src\org\bsep\acp\ahkBridge.ahk": CreateProcess error=193, %1 n?est pas une application Win32 valid
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
    at java.lang.Runtime.exec(Runtime.java:617)
    at java.lang.Runtime.exec(Runtime.java:485)
    at org.bsep.acp.StringSender.sendString(StringSender.java:25)
    at org.bsep.acp.VariousTests.ahkBridgeTester(VariousTests.java:23)
    at org.bsep.acp.VariousTests.main(VariousTests.java:13)
Caused by: java.io.IOException: CreateProcess error=193, %1 n?est pas une application Win32 valid
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:376)
    at java.lang.ProcessImpl.start(ProcessImpl.java:136)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
    ... 5 more

翻译:这不是一个有效的win32应用程序。
谢谢.

xeufq47z

xeufq47z1#

由于原始AHK脚本不可执行,因此您可以编译脚本并直接执行它,或者将脚本的路径作为参数传递给AutoHotkey.exe(通常位于C:\Program Files\AutoHotkey\中)。关于第二个选项,您的代码可能看起来像这样:

public void sendString(String data) throws IOException, InterruptedException {
    String ahkPath = "C:\\Program Files\\AutoHotkey\\AutoHotkey.exe";
    String scriptPath = "C:\\Users\\MCL\\test.ahk";
    runtime.exec(new String[] { ahkPath, scriptPath, data} );
    Thread.currentThread();
    Thread.sleep(1000);
}

AutoHotkey会将每个参数传递给脚本,从第二个参数开始(在本例中:data)。

zfciruhq

zfciruhq2#

你可以把另一个中间人到它,即 bat 脚本启动ahk。可以通过exec启动,这里有一个关于启动 bat 的帖子
How do I run a batch file from my Java Application?
首先尝试命令行调用ahk传递脚本,但我不确定这是否有效,值得一试

y1aodyip

y1aodyip3#

如果AHK文件(正确)与AutoHotKey关联,并且支持Desktop,则可以使用java.awt.Desktop类来打开脚本(查看javadoc以了解详细信息)。

import java.awt.Desktop;

// . . .

    private final static String AHK_BRIDGE = "C:\\perso\\WorkspaceScripts\\skyrimTools\\src\\org\\bsep\\acp\\ahkBridge.ahk";

// . . . 

    if (Desktop.isDesktopSupported()) {
        Desktop.getDesktop().open(new File(AHK_BRIDGE));
    } else {
        // error message, Exception, or Runtime solution from other answers
    }

相关问题