windows – 如何使用Delphi获取与文件扩展名相关联的程序名称?
我需要获取当前与当前用户的文件扩展名相关联的程序的名称.如果右键单击文件并选择属性,那么我需要的是“打开方式”行右侧的程序名称.
例如对于“.xls”,我希望能够得到答案“Microsoft Office Excel”,或者用户拥有的任何程序作为打开.xls文件的默认程序. 我已经确定它并不像进入HKEY_CLASSES_ROOT并将其取出那么容易,因为它也可以在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER或HKEY_USERS中指定. 也许我需要知道的是Windows使用的啄食顺序来确定这个以及如何到达每个位置.当然,执行此操作的Windows API调用将是理想的. 这是一个类似的问题: 我正在使用Delphi 2009,需要一个适用于Windows XP,Vista和7的解决方案. 谢谢大家的答案. 我认为可执行文件的名称毕竟不在注册表中.在广泛浏览了将提供名称的Windows API之后,我找不到一个. 我认为Mef的答案是最好的.从程序可执行文件中包含的信息中获取可执行文件的名称.
步骤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 + 'ShellOpenCommand') then begin Result := Reg.ReadString(''); Reg.CloseKey; end; end; Reg.Free; end; (见here,或marc_s’anwser对这个问题:-) 第2步 现在,您可以从此可执行文件的版本信息中读出程序的名称!最简单的方法是使用您可以通过Google找到的TVersionInfo类,例如here. var VersionInfo: TVersionInfo; VersionInfo := TVersionInfo.Create('PathToExename.exe'); s := VersionInfo.KeyValue['Description']; 但是,您必须知道某些程序因此使用描述密钥(如RAD Studio本身或MS Excel),而其他程序则使用产品名称密钥… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-server-2008 – 使用资源监视器记录?
- Windows – Win32:CreateDialog而不是多次调用C
- windows – 在脚本中以管理员身份运行cmd.exe
- 使用Perc 4 / Di和Windows SBS 2003在Dell Power
- windows – 如何找到当前的DNS服务器?
- windows-server-2008 – 你何时会使用“密码永不
- 在Windows和活动目录上使用什么git服务器解决方案
- winapi – Win32:如何在窗外画画?
- 为什么Windows 64选择要求保存/恢复xmm6和xmm7?
- windows-runtime – Windows 8应用程序支持的URI