rundll32 url.dll,FileProtocolHandler
Posted
技术标签:
【中文标题】rundll32 url.dll,FileProtocolHandler【英文标题】: 【发布时间】:2012-10-14 08:55:14 【问题描述】:我使用 my_file.dotx
在Windows下打开文件。
它适用于 .docx 文档,但是当我尝试使用 .dotx 文档(模板文档)时,它会根据模板创建一个新的 .docx。
就像 Windows 资源管理器中的正常行为一样:当您双击 .dotx 模板文件时,它会基于它创建一个新的 .docx 文件。如果你想打开真正的.dotx文件,你必须右键单击它并选择“打开”而不是“新建”。
问题是:如何用rundll32做同样的事情?命令中是否有强制打开基础模板而不是创建新文档的选项?
编辑:我需要一种在命令行中不使用 C 函数的方法,只需纯文本(我正在使用 Java 来执行此操作)。
【问题讨论】:
***.com/questions/3207365/… 【参考方案1】:也许您可以在ShellExecute 周围封装一个简单的 C 程序,传递动词 OPEN。
ShellExecute(NULL, TEXT("open"),
TEXT("rundll32.exe"), TEXT("url.dll,FileProtocolHandler pathToGadget"),
NULL, SW_SHOWNORMAL);
我找到了这个例子here。
编辑:
由于您是在 Java 中执行此操作 - 您可以尝试像 (from the example I found on The Wannabe Java Rockstar and butchered) 这样的 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" );
【讨论】:
就像我说的 - 围绕它包装一个简单的 C 程序。或者也许使用带有 P/Invoke 的 PowerShell 脚本。 那么有没有办法用纯文本来做呢?我不想将任何脚本或 C 程序集成到我的 Java 应用程序中......以上是关于rundll32 url.dll,FileProtocolHandler的主要内容,如果未能解决你的问题,请参考以下文章