我正在尝试创建一个小的包装器库,用于从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
会抱怨不存在此类函数,因此必须发生某些事情。
感谢帮助。