-->

RUNDLL32 URL.DLL,FileProtocolHandler(rundll32 url.

2019-07-02 11:37发布

我使用rundll32 url.dll,FileProtocolHandler my_file.dotx Windows下打开文件。

它工作正常的.docx文件,但是当我.DOTX文件(模板的文档)尝试它,它创建一个基于模板的新的.docx。

就像在Windows资源管理器的正常行为:在.DOTX模板文件,当您双击它创建基于一个新的.docx文件。 它如果要开启真正.DOTX文件,你必须点击右键并选择“打开”,而不是“新”。

问题是:如何做相同的RUNDLL32? 有没有在命令中的选项来强制而不是创建一个新文档的基础模板的开放?

编辑:我需要一种方法来做到这一点没有C函数,只是简单的文本,在命令行(我用Java做)。

Answer 1:

也许你可以环绕一个简单的C程序的ShellExecute ,通过动词OPEN。

ShellExecute(NULL, TEXT("open"), 
TEXT("rundll32.exe"), TEXT("url.dll,FileProtocolHandler pathToGadget"), 
NULL, SW_SHOWNORMAL);   

我发现这个例子在这里 。

编辑:

既然你在Java中这样做-你可以尝试JNI包装这样的ShellExceute功能(从我的崇拜者的Java的Rockstar发现和屠杀的例子)

 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" );
  }


文章来源: rundll32 url.dll,FileProtocolHandler