加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:31:09 所属栏目:大数据 来源:网络整理
导读:我想让用户为当前未注册的文件扩展名选择一个关联(打开方式). 目前我告诉API通过使用ShellExecute打开该文件,并返回一个ERROR_NO_ASSOCIATION错误代码. 有没有办法告诉API它应该让用户选择一个新的关联? 解决方法 我用 procedure ShellOpenAs(const AFileNa
我想让用户为当前未注册的文件扩展名选择一个关联(打开方式).

目前我告诉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函数.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读