4

rundll32 url.dll,FileProtocolHandler my_file.dotxWindowsでファイルを開くために使用しています。

.docx ドキュメントでは問題なく動作しますが、.dotx ドキュメント (テンプレート ドキュメント) で試してみると、テンプレートに基づいて新しい .docx が作成されます。

Windows エクスプローラーの通常の動作と同様に、.dotx テンプレート ファイルをダブルクリックすると、それに基づいて新しい .docx ファイルが作成されます。実際の .dotx ファイルを開きたい場合は、それを右クリックして、「新規」ではなく「開く」を選択する必要があります。

質問: rundll32 で同じことを行う方法は? 新しいドキュメントを作成する代わりに、基になるテンプレートを強制的に開くコマンドのオプションはありますか?

編集:コマンドラインでC関数を使用せずに、プレーンテキストだけでそれを行う方法が必要です(Javaを使用して実行しています)。

4

1 に答える 1

4

おそらく、単純な C プログラムをShellExecuteの周りにラップして、動詞 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" );
  }
于 2012-10-24T10:20:39.073 に答える