首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rundll32 url.dll,FileProtocolHandler

rundll32 url.dll,FileProtocolHandler
EN

Stack Overflow用户
提问于 2012-10-24 18:14:54
回答 1查看 14.1K关注 0票数 3

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

它可以很好地处理.docx文档,但是当我在.dotx文档(模板文档)中尝试它时,它会根据模板创建一个新的.docx。

就像windows资源管理器中的正常行为一样:当您双击.dotx模板文件时,它会基于该文件创建一个新的.docx文件。如果你想打开真正的.dotx文件,你必须右击它并选择“打开”而不是“新建”。

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

编辑:我需要一种方法,在命令行中不用C函数,只需要纯文本(我正在使用Java来做这件事)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-24 18:20:39

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

代码语言:javascript
复制
ShellExecute(NULL, TEXT("open"), 
TEXT("rundll32.exe"), TEXT("url.dll,FileProtocolHandler pathToGadget"), 
NULL, SW_SHOWNORMAL);   

我找到了这个示例here

编辑:

由于您是在Java语言中执行此操作,因此可以尝试ShellExceute函数的JNI wrapping,如下所示

代码语言:javascript
复制
 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" );
  }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13047158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档