我需要获取当前与当前用户的文件扩展名相关联的程序的名称.如果右键单击文件并选择属性,那么我需要的是“打开方式”行右侧的程序名称.
例如对于“.xls”,我希望能够得到答案“Microsoft Office Excel”,或者用户拥有的任何程序作为打开.xls文件的默认程序.
我已经确定它并不像进入HKEY_CLASSES_ROOT并将其取出那么容易,因为它也可以在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER或HKEY_USERS中指定.
也许我需要知道的是Windows使用的啄食顺序来确定这个以及如何到达每个位置.当然,执行此操作的Windows API调用将是理想的.
这是一个类似的问题:
How to get icon and description from file extension using Delphi?但该问题仅回答了如何获得扩展的描述和相关程序的图标.我找不到扩展它的方法来获取相关程序的名称.
我正在使用Delphi 2009,需要一个适用于Windows XP,Vista和7的解决方案.
谢谢大家的答案.
步骤1
uses Registry,Windows,SysUtils; function GetAssociation(const DocFileName: string): string; var FileClass: string; Reg: TRegistry; begin Result := ''; Reg := TRegistry.Create(KEY_EXECUTE); Reg.RootKey := HKEY_CLASSES_ROOT; FileClass := ''; if Reg.OpenKeyReadOnly(ExtractFileExt(DocFileName)) then begin FileClass := Reg.ReadString(''); Reg.CloseKey; end; if FileClass <> '' then begin if Reg.OpenKeyReadOnly(FileClass + '\Shell\Open\Command') then begin Result := Reg.ReadString(''); Reg.CloseKey; end; end; Reg.Free; end;
第2步
现在,您可以从此可执行文件的版本信息中读出程序的名称!最简单的方法是使用您可以通过Google找到的TVersionInfo类,例如here.
var VersionInfo: TVersionInfo; VersionInfo := TVersionInfo.Create('PathToExe\name.exe'); s := VersionInfo.keyvalue['Description'];
但是,您必须知道某些程序因此使用描述密钥(如RAD Studio本身或MS Excel),而其他程序则使用产品名称密钥…
原文地址:https://www.jb51.cc/windows/365740.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。