当前位置: 首页 > 面试题库 >

rundll32 url.dll,FileProtocolHandler

何建中
2023-03-14
问题内容

rundll32 url.dll,FileProtocolHandler my_file.dotx用来在Windows下打开文件

它可以与.docx文档一起正常工作,但是当我对.dotx文档(模板文档)进行尝试时,它会基于模板创建一个新的.docx。

就像Windows资源管理器中的正常行为一样:当双击.dotx模板文件时,它会基于它创建一个新的.docx文件。如果要打开真实的.dotx文件,则必须右键单击它,然后选择“打开”而不是“新建”。

问题是:如何对rundll32做同样的事情?命令中是否有一个选项可以强制打开基础模板而不是创建新文档?

编辑:我需要一种在命令行中不使用C函数,仅使用纯文本的方式来实现它(我使用Java来做到这一点)。


问题答案:

也许您可以在ShellExecute周围包装一个简单的C程序,并传递动词OPEN。

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

我在这里找到了这个例子。

编辑:

由于您是在Java中进行此操作-
您可以尝试像这样对ShellExceute函数进行JNI包装(来自我在The
Wannabe 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" );
  }


 类似资料:

相关阅读

相关文章

相关问答