rundll32 url.dll,FileProtocolHandler
Я использую rundll32 url.dll,FileProtocolHandler my_file.dotx
открыть файлы под виндой.
Он отлично работает с документами.docx, но когда я пробую его с документами.dotx (шаблонные документы), он создает новый.docx на основе шаблона.
Как и в обычном поведении в проводнике Windows: когда вы дважды щелкаете файл шаблона.dotx, он создает на его основе новый файл.docx. Если вы хотите открыть настоящий файл.dotx, вы должны щелкнуть по нему правой кнопкой мыши и выбрать "открыть" вместо "новый".
Вопрос в том, как сделать то же самое с rundll32? Есть ли в команде опция принудительного открытия базового шаблона вместо создания нового документа?
Редактировать: мне нужен способ сделать это без функций C, просто текст в командной строке (я использую Java для этого).
1 ответ
Может быть, вы можете обернуть простую C-программу вокруг ShellExecute, передавая глагол OPEN.
ShellExecute(NULL, TEXT("open"),
TEXT("rundll32.exe"), TEXT("url.dll,FileProtocolHandler pathToGadget"),
NULL, SW_SHOWNORMAL);
Я нашел этот пример здесь.
редактировать:
Так как вы делаете это в Java - вы можете попробовать JNI-упаковку функции ShellExceute, как это (из примера, который я нашел на 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" );
}