如何使用 Delphi 获取与文件扩展名关联的程序名称?

2024-01-02

我需要获取当前与当前用户的文件扩展名关联的程序的名称。如果右键单击文件并选择属性,那么我需要的是“打开方式”行右侧的程序名称。

例如对于“.xls”,我希望能够获得答案“Microsoft Office Excel”,或者用户作为默认程序打开 .xls 文件的任何程序。

我确定这并不像进入 HKEY_CLASSES_ROOT 并将其挑选出来那么容易,因为它也可能在 HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER 或 HKEY_USERS 中指定。

也许我需要知道的是 Windows 用来确定这一点的优先顺序以及如何到达每个位置。当然,执行此操作的 Windows API 调用将是理想的选择。

这是一个类似的问题:如何使用Delphi从文件扩展名中获取图标和描述? https://stackoverflow.com/questions/829843/但该问题仅回答了如何获取扩展程序的描述和关联程序的图标。我找不到一种方法来扩展它以获取关联程序的名称。

我正在使用 Delphi 2009,需要一个适用于 Windows XP、Vista 和 7 的解决方案。


谢谢大家的答案。

我似乎相信可执行文件的名称毕竟不在注册表中。在广泛寻找可以给出该名称的 Windows API 后,我找不到一个。

我认为Mef的回答是最好的。从程序可执行文件中包含的信息中获取可执行文件的名称。


后续:我发现David Hefferman 对“如何使用默认文本编辑器打开文件?”的回答 https://stackoverflow.com/a/16941705/30176为使用不同扩展名的默认程序打开一个程序提供了一种出色的解决方案。


当有 API 函数可以满足您的需要时,请不要在注册表中进行探索。

在你的情况下,你想要AssocQueryString http://msdn.microsoft.com/en-us/library/bb773471.aspx。您可以给它文件扩展名,它会告诉您注册来处理该扩展名的程序(AssocStr_Executable)。如果您打算running该程序打开文档,那么您确实需要命令字符串而不仅仅是可执行文件;AssocQueryString也可以给你(AssocStr_Command)。它还可以告诉您文档类型,例如 Windows 资源管理器中显示的内容,例如“文本文档”或“Zip 存档”(AssocStr_FriendlyDocName).

该 API 函数是一个包装器IQueryAssociations http://msdn.microsoft.com/en-us/library/bb761400.aspx界面。如果您正在寻找来自多种文件类型的程序,或查找与单一类型关联的大量字符串,您可能希望实例化该接口并重用它,而不是一遍又一遍地调用 API 函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Delphi 获取与文件扩展名关联的程序名称? 的相关文章

  • Delphi AES 库 (Rijndael) 使用 KAT Vectors 进行测试

    对于这两个库 Delphi 加密概要 v 5 2 http code google com p delphidec TurboPower 密码箱 v 2 07 http lockbox seanbdurkin id au tiki list
  • 如何从 VCL.Graphics 获取所有已注册的文件格式...但 64 位

    在我的 32 位应用程序中 我使用FindRegisteredPictureFileFormats 单元由 Cosmin Prund 提供 https stackoverflow com a 14677532 505088 gt 如何从图形
  • 如何在运行时(Delphi/Windows)程序中添加代码?

    我正在Windows XP Delphi 7上工作 我需要在正在运行的程序中添加一些过程 或函数 并且我不想在完成后再次重新编译它 我只有一个具有 5 个功能的主机应用程序来发送不同类型的警报 但是还有其他新的警报类型 所以我必须执行新的功
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba
  • Windows C++ 中的键盘钩子还是什么?

    我希望构建自己的应用程序 它可以将键盘命令 消息 发送到 Windows 操作系统 例如 当我按下组合键 ctrl shift n 时 我希望启动 notepad exe 我怎样才能做到这一点 您对所使用的概念有什么建议吗 我读过 何时使用
  • 如何调试仅在应用程序关闭时发生的崩溃? (德尔福)

    因此 经过最近的一些更改 我们发现我们最古老的应用程序之一有时会在关闭时崩溃 这会以 运行时错误 216 消息的形式或来自 Windows 错误报告的消息的形式表明应用程序已停止工作 该应用程序已经发出OutputDebugString 每
  • Delphi 6 命令行编译:无 DCU

    当对 dpr 文件使用 dcc32 时 它会生成一个 dll 但不会生成 dcu 项目级别 cfg 使用 N 开关设置路径 但指定的目录中没有任何内容 当 E 开关正在工作时 它必须看到 cfg 我尝试在调用 dcc32 之前对 dpr 文
  • 常见的 Windows 编译器上有哪些 std::locale 名称可用?

    该标准对于什么构成有效的语言环境名称几乎没有提及 只有传递无效的区域设置名称才会导致std runtime error 哪些语言环境名称可用于常见的 Windows 编译器 例如 MSVC MinGW 和 ICC 好吧 C 和 C 语言环境
  • 如何检查注册表项是否存在

    我不知道我的错误在哪里 它总是跳到else分支 但是密钥存在 我检查了几次 var reg TRegistry begin with TRegistry Create do try RootKey HKEY CURRENT USER Ope
  • Windows 操作系统中 ST_INO(os.stat() 输出)的含义

    谁能告诉我这个值的含义是什么st ino是跑步时os stat 在 Windows 上 Python 3 5 3 在早期的 Python 版本中 它包含虚拟值 但最近发生了变化 我找不到它是如何计算 生成的 我怀疑它因文件系统 NTFS F
  • 卸载以前的版本安装新版本的安装项目

    我创建了一个安装项目并安装在Windows系统中 在安装安装项目之前 我将其设置为 DetectNewInstallerVersion true and RemovePreviousVersion True 我也每次都换版本 但是 如果我重
  • 在有或没有 UNICODE 支持的情况下,如何在我的程序中使用 _stprintf?

    微软的 定义 stprintf as swprintf if UNICODE被定义 并且sprintf如果不 但这些函数采用不同的参数 在swprintf 第二个参数是缓冲区大小 但是sprintf没有这个 有人偷懒了吗 如果是这样 这就是
  • 获取自动热键中的可用屏幕区域

    我正在尝试编写一些简单的 AutoHotkey 脚本来移动窗口 但在获取正确的屏幕尺寸值时遇到问题 我试图获取屏幕上可用区域的大小 通常是全屏分辨率减去任务栏 也许还有任何其他停靠窗口 如 Vista 中的侧边栏 我发现的获取屏幕宽度的方法
  • 区分注册表项和值路径

    是否有相当于 System IO DirectoryInfo and System IO FileInfo 用于区分注册表项和值 我想评估一条路径并为用户记录该路径的最终目标是什么 到目前为止 这就是我所拥有的 而且有点丑陋 path Re
  • 从创建 UI 的同一线程更新 VCL。为什么?

    我知道我必须调用 Synchronize 来从未创建控件或向窗口发送消息的线程更新 vcl 我经常听到 线程不安全 这个词 但我找不到关于正在发生的事情的实际解释 我知道应用程序可能会因访问冲突而崩溃 但我又不知道为什么 请阐明这个主题 V
  • Windows CE 6.0 注册表中的时间设置

    我有一台装有 Windows CE 6 0 的 Motorola MC3100 移动条码扫描设备 现在我想让设备在启动时使用我创建的一些注册表文件与我们的域控制器同步其日期 时间 我使用了下面这两个注册表文件来接近我的需要 REG 1 HK
  • Delphi - 获取和设置 ListView 的滚动条位置

    这似乎是一个愚蠢而简单的问题 然而 我一直无法找到令人满意的答案 基本上 我有一个列表视图 样式 vsReport 与数据 有时 我必须更新它 因此 我必须清除列表视图并用更新的数据再次填充它 但是 当我这样做时 滚动条位置将重置为 0 我
  • 为什么同一个curl命令在windows和linux下输出不同的东西?

    为什么同样的curl o file https www link com 命令输出不同的东西 例如 如果我运行命令curl o source txt https www youtube com playlist list PLIx6Fwnp
  • TStream.Position 与 TStream.Seek 比较

    要移动 TStream 类中的 当前字节 指针 我们可以使用属性 Position 例如 MyStream Position 0 或使用 Seek 方法 例如 MyStream Seek 0 soFromBeginning 问题是 哪一个更
  • TThread.resume 在 Delphi-2010 中已弃用,应该在什么地方使用?

    在我的多线程应用程序中 I use TThread 挂起 and TThread resume 自从将我的应用程序移至 Delphi 2010 后 我收到以下警告消息 DCC 警告 xxx pas 277 W1000 符号 Resume 已

随机推荐

  • python:如何将列表中的每个值与另一个列表中的所有值相乘

    EDIT2 我已经删除了其余的代码 这样我就不会破坏解决方案 感谢您的帮助 编辑 我包含了我的整个代码 我不想包含它 因为我不想破坏任何自己尝试这个问题的人的解决方案 但我需要帮助 所以就在这里 我通过执行以下操作手动完成此操作 但我希望它
  • 等号(=) 和 IN 与子查询的区别

    我有一个查询需要 20 秒才能执行 请按照我的查询操作 SELECT MATLIGA COD MAT FAMILIA FROM ORCAMENTOS dbo OR 1INSUMOS INSUMOS INNER JOIN ORCAMENTOS
  • SQLite3和多进程

    当多个进程访问同一个SQLite数据库文件时 如何保证正确性 首先 避免并发访问sqlite数据库文件 并发性是 sqlite 的弱点之一 如果您有高度并发的应用程序 请考虑使用其他数据库引擎 如果您无法避免并发或删除 sqlite 请包装
  • XPath 不适用于动态 HTML 文档

    注意 这个问题及其答案对于大多数 所有支持 XPath 的编程语言和库都有效 而不仅仅是 JavaScript 使用以下代码创建一个非常简单的 HTML 页面 实际代码加载远程页面 但我试图将您的注意力集中在这里的主要问题上 var dt
  • 无法识别的选择器发送到实例 UIViewController

    我不断收到错误 NSInvalidArgumentException 原因 UIViewController setPhotoCellName 无法识别的选择器发送到实例 当我进入准备segue调用时 目前我有 TabBarControll
  • 如何在 Grails 中外部化自定义约束?

    我想将自定义约束验证器闭包保留在属性的约束定义之外 因为这样更容易阅读和重用 但我做错了 我正在尝试这样做 class City String name static constraints name nullable false blan
  • 更新模型并将更新操作与 UI 绑定

    我目前已经使用 AngularJS 开发了一个内容表 该表将基于 Angular 服务 模型 进行填充 该模型调用 Web 服务并返回列表 并使用 ng repeat 并创建一个表及其所有内容 目前一切正常 但我有一个小问题 在表的一部分
  • 表达式 awk、python 中的无效字符

    我有一个如下所示的命令 ps v p 2585 awk if 9 MEM print 9 现在这在 bash 中运行得很好 它只需要你给它的任何 pid 的内存部分 不过我现在正在尝试用 python 实现它 但遇到了一些问题 这是我在 p
  • 尝试从 Reddit API 获取数据时出现 403 错误

    我正在使用 oAuth 来验证我的应用程序 我设法获得了代码 access token 和refresh token 因此下一步将尝试获取有关当前用户的信息 public async void GetCurrentUser using va
  • Twitter bootstrap:带有图标但没有文本的按钮高度错误

    There are two buttons on simple html page with attached twitter bootstrap 2 3 with and without text If I open it button
  • JOptionPane 按钮和自定义面板之间的通信

    我通过使用我想要的字段构建 JPanel 并将其添加到 JOption 窗格来创建多输入对话框 JMainPanel mainPanel new JMainPanel mensaje parametros mgr int i JOption
  • rowsTotal、recordsFiltered 解释 Jquery DataTable

    我正在阅读数据表文档 但找不到答案 我的问题是 我有一个包含 10 000 行的表 我按州进行搜索 结果是 3000 行 从 3000 行开始 我将每页显示 20 行 recordsTotal 这里应该有什么值 recordsFiltere
  • 获取逗号分隔字符串列之间的公共元素(来自同一行),保留行名

    我有一个数据框 其中一些列包含逗号分隔的字符串 colA colB 1 a b c d b e 2 f g h f g m p 3 i j k f o j 我想获得对应于同一行的两列之间的共同元素 所以我想要的输出是 colA colB 1
  • 当名称不匹配时 MVC UpdateModel

    假设您有一个看起来像这样的模型 public class MyClass public string Name get set public DateTime MyDate get set Visual Studio 为您提供的默认编辑模板
  • AJAX 请求时清空 $_SESSION 超全局变量,但保留会话 ID

    我遇到问题 SESSIONAJAX 请求上的超级全局 session start 函数在任何会话编码之前调用 调用代码和AJAX响应代码中的Session ID也是相同的 通过echoing测试session id 在两个脚本中 AJAX
  • 如何使用有效的 AWS 配置文件配置 Alexa Ask-cli?

    在使用了developer amazon com和aws amazon com的漂亮浏览器GUI之后 事情变得越来越严重 现在我想使用ask cli来初始化Alexa技能及其lambda函数 当我想要的时候ask init 它告诉我 我应该
  • Unity 3D:资源包与资源文件夹与 www.Texture

    因此 我在论坛上阅读了一些有关 Unity 3D 中的 AssetBundles 和 Resources 文件夹的内容 但我无法找出我所面临问题的最佳解决方案 问题是这样的 我有一个专为独立设计的程序 可以加载充满 png 和 jpg 图像
  • 具有手动内存管理的解释语言?

    哪些解释型语言无指针语言 IE Python Java Perl PHP Ruby Javascript 等 具有手动内存管理功能 我不记得曾经听说过 解释型语言主要担心的不是垃圾收集的非确定性延迟 或没有足够延迟时的空间复杂性 吗 那么为
  • MPAndroidChart - 自 v2 以来删除顶部边框/轴

    我将 MPAndroidChart 从 v1 7 升级到 v2 并且必须更改一些内容 新的事情之一是我现在似乎有一个最大值的顶部边框 我试图隐藏所有边框的代码是这样的 LineChart graph LineChart connection
  • 如何使用 Delphi 获取与文件扩展名关联的程序名称?

    我需要获取当前与当前用户的文件扩展名关联的程序的名称 如果右键单击文件并选择属性 那么我需要的是 打开方式 行右侧的程序名称 例如对于 xls 我希望能够获得答案 Microsoft Office Excel 或者用户作为默认程序打开 xl