窗口 – 如何显示未注册文件扩展名的“打开方式”对话框?

前端之家收集整理的这篇文章主要介绍了窗口 – 如何显示未注册文件扩展名的“打开方式”对话框?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想让用户为当前未注册文件扩展名选择一个关联(打开方式).

目前我告诉API通过使用ShellExecute打开该文件,并返回一个ERROR_NO_ASSOCIATION错误代码.

有没有办法告诉API它应该让用户选择一个新的关联?

解决方法

我用
procedure ShellOpenAs(const AFileName: string; AHandle: HWND);
begin
  ShellExecute(AHandle,'open',PChar('rundll32.exe'),PChar('shell32.dll,OpenAs_RunDLL ' + AFileName),nil,SW_SHOWNORMAL);
end;

编辑(灵感来自大卫的评论https://stackoverflow.com/a/13229516/1431618):
通过直接调用OpenAs_RunDLL可以省略ShellExecute和RunDll32:

procedure OpenAs_RunDLL(hwnd: HWND; hinst: HINST; lpszCmdLine: LPSTR; nCmdShow: Integer); stdcall; external shell32;

procedure ShellOpenAs(AHandle: HWND; const AFileName: string);
begin
  OpenAs_RunDLL(AHandle,HInstance,PChar(AFileName),SW_SHOWNORMAL);
end;

Windows Vista和更高版本还有SHOpenWithDialog. (我觉得有趣的是,Microsoft写了一个兼容RunDLL的入口点,但直到Vista并没有提供常规的API函数.)

原文链接:https://www.f2er.com/delphi/101169.html

猜你在找的Delphi相关文章