我需要获取当前与当前用户的文件扩展名相关联的程序的名称.如果右键单击文件并选择属性,那么我需要的是"打开方式"行右侧的程序名称.
例如,对于".xls",我希望能够得到答案"Microsoft Office Excel",或者用户拥有的任何程序作为打开.xls文件的默认程序.
我已经确定它并不像进入HKEY_CLASSES_ROOT并选择它那么容易,因为它也可以在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER或HKEY_USERS中指定.
也许我需要知道的是Windows用来确定这个以及如何到达每个位置的啄食顺序.当然,执行此操作的Windows API调用将是理想的.
这是一个类似的问题: 如何使用Delphi从文件扩展名获取图标和描述?但是这个问题只回答了如何获得扩展的描述和相关程序的图标.我找不到扩展它的方法来获取相关程序的名称.
我正在使用Delphi 2009,需要一个适用于Windows XP,Vista和7的解决方案.
谢谢大家的答案.
我认为可执行文件的名称毕竟不在注册表中.在广泛浏览了将提供名称的Windows API之后,我找不到一个.
我认为Mef的答案是最好的.从程序可执行文件中包含的信息中获取可执行文件的名称.
我有一个表单在TabControl中显示文件信息,我希望页面在其选项卡中有文件的图标.如何获取与文件类型关联的图标?
我更喜欢不涉及在注册表中查找内容的解决方案,但如果这是唯一的方式那么就是这样.
我正在开发一个Delphi文档管理应用程序,所以我给用户一些类似于Windows资源管理器的功能.
我想知道是否有办法获取Windows资源管理器使用的预览.例如,Windows资源管理器为pdf文档创建一个小缩略图,并在用户选择查看"大图标"时显示它.有没有办法检索该预览?
MyTImage := GiveMePreviewForFile('C:\Test\File.pdf');
Run Code Online (Sandbox Code Playgroud) 有几种方法可以获取给定扩展的描述和默认图标(没有完整路径),例如"*.doc"我想获得"Microsoft Word文档"和相关图标,您认为这将是最快的以下之一:
搜索注册表:
调用API ShGetFileInfo.我相信这有点慢.
根据Rob的说法,这里:如何使用Delphi从文件扩展名中获取图标和描述?
将IExtractIcon接口称为"更灵活,更高效"的替代方案.但它建议的顺序是使用IShellFolder接口,然后调用GetUIObjectOf获取文件的IExtractIcon接口,然后调用GetIconLocation和Extract来检索图标的句柄.(但是这个方法无法读取扩展描述?)
由于速度非常重要,因为我需要读取系统中所有文件类型的信息.
非常感谢你!