我正在使用rundll32 url.dll,FileProtocolHandler my_file.dotx打开Windows下的文件。
它可以很好地处理.docx文档,但是当我在.dotx文档(模板文档)中尝试它时,它会根据模板创建一个新的.docx。
就像windows资源管理器中的正常行为一样:当您双击.dotx模板文件时,它会基于该文件创建一个新的.docx文件。如果你想打开真正的.dotx文件,你必须右击它并选择“打开”而不是“新建”。
问题是:如何对rundll32做同样的事情?命令中是否有强制打开底层模板而不是创建新文档的选项?
编辑:我需要一种方法,在命令行中不用C函数,只需要纯文本(我正在使用Java来做这件事)。
发布于 2012-10-24 18:20:39
也许您可以在ShellExecute周围包装一个简单的C程序,传递动词OPEN。
ShellExecute(NULL, TEXT("open"),
TEXT("rundll32.exe"), TEXT("url.dll,FileProtocolHandler pathToGadget"),
NULL, SW_SHOWNORMAL); 我找到了这个示例here。
编辑:
由于您是在Java语言中执行此操作,因此可以尝试ShellExceute函数的JNI wrapping,如下所示
public static boolean execute(String file, String parameters) {
Function shellExecute =
Shell32.getInstance().getFunction(SHELL_EXECUTE.toString());
Int32 ret = new Int32();
shellExecute.invoke(ret, // return value
new Parameter[] {
new Handle(), // hWnd
new Str("open"), // lpOperation
new Str(file), // lpFile
new Str(parameters), // lpParameters
new Str(), // lpDirectory
new Int32(1) // nShowCmd
});
if(ret.getValue() <= 32) {
System.err.println("could not execute ShellExecute: " +
file + ". Return: " + ret.getValue());
}
return (ret.getValue() > 32);
}
public static void main(String[] args) {
ShellExecute.execute("rundll32.exe","url.dll,FileProtocolHandler pathToGadget" );
}https://stackoverflow.com/questions/13047158
复制相似问题