Java - 调用Windows API函数的正确方法(使用rundll32.exe)?

时间:2015-01-27 12:48:21

标签: java windows rundll32

我正在尝试创建一个小的包装器库,用于从Java调用Windows API函数(例如user32.dll函数)。

我在C#中测试了这个概念,它工作正常,但我似乎无法用Java复制结果。

一个例子 - 调用"SetForegroundWindow" in "user32.dll"

public static void rundll32(String library, String function) throws IOException
{
    String runtimeString = System.getenv("WINDIR") + "\\system32\\rundll32.exe " + library + "," + function;
    System.out.println(runtimeString);

    RUNTIME.exec(runtimeString);
}

public static void rundll32(String library, String function, String... parameters) throws IOException
{
    String parameterString = "";

    for(String parameter : parameters)
    {
        parameterString = parameterString + parameter + " ";
    }
    parameterString = parameterString.substring(0, parameterString.length() - 1);
    function = function + " " + parameterString;

    rundll32(library, function);
}

当我调用代码时(句柄来自一个用于获取hWnd的五行C#程序):

RuntimeHelper.rundll32("user32.dll", "SetForegroundWindow", String.valueOf(handle));

以上代码在我的代码段中由第4行生成:

C:\WINDOWS\system32\rundll32.exe user32.dll,SetForegroundWindow 593428

这符合语法as told by Microsoft

然而,当代码运行时,没有任何事情发生,我也不知道为什么。但是,如果我将调用的函数部分更改为虚假内容,rundll32.exe会抱怨不存在此类函数,因此必须发生某些事情。 感谢帮助。

0 个答案:

没有答案