使用ShellExecute运行外部程序

时间:2014-10-21 12:55:48

标签: delphi shellexecute

据我所知...你需要在ShellExecute中设置可执行程序(如notepad.exe),但如果用户想要使用其他外部程序(如notepad ++。exe)打开文件怎么办?如果可以,那我该怎么做?

1 个答案:

答案 0 :(得分:1)

我的猜测是,您真正想要做的是使用用户选择与该文档类型关联的任何程序打开文档。在这种情况下,您将文档传递给ShellExecute而不是程序:

ShellExecute(0, nil, PChar(DocumentFileName), nil, nil, SW_SHOWNORMAL);

为第二个参数(动词)传递nil,使用文档的默认动词。通常这将是'open'动词。但不总是。所以你可以写一下:

ShellExecute(0, 'open', PChar(DocumentFileName), nil, nil, SW_SHOWNORMAL);

如果您希望能够以合理的方式检查错误,则需要使用ShellExecuteEx而不是ShellExecute


你的评论对这个问题有了更多的了解,尽管我还在抓着稻草。您似乎希望能够在用户首选的文本编辑器中打开RTF文件。使用ShellExecuteEx传递类名来执行此操作,该类名指示shell将文件视为文本。

var
  sei: TShellExecuteInfo;
....
ZeroMemory(@sei, SizeOf(sei));
sei.cbSize := SizeOf(sei);
sei.fMask := SEE_MASK_CLASSNAME;
sei.lpVerb := 'open';
sei.lpFile := PChar(DocumentFileName);
sei.nShow := SW_SHOWNORMAL;
sei.lpClass := '.txt';
Win32Check(ShellExecuteEx(@sei));