从注册表中读取已知的文件扩展名/类型

2024-04-23

我想向用户提供已知文件扩展名的列表供他选择。我知道它们通常存储在注册表中的 HKEY_CLASSES_ROOT 下,如下所示:

.txt ->(默认)=“txtfile”

其中 txtfile 包含有关关联程序等的信息。

不幸的是,注册表中的该位置还存储了许多其他键,例如文件类型(例如 txtfile)和条目,例如

CAPICOM.证书(无论是什么)

如何确定哪些条目是文件扩展名?或者有没有像 API 函数一样获得这些扩展的不同方法?

(我认为这并不重要,但我正在使用 Delphi 来编写该程序。)


不能保证 HKEY_CLASSES_ROOT 中前面带有点的每个键都用于文件关联,但每个文件关联都需要创建前面带有点的键。请参阅 MSDN 上文件类型 http://msdn.microsoft.com/en-us/library/cc144148(VS.85).aspx#fa_register_type topic.

AFAIK,我在这里描述的方法符合Windows的方式设置文件关联该功能可获取所有已知文件类型的列表。这是基于我以前研究这个主题时的观察。

为此,您需要执行以下复杂的步骤:

  1. 枚举前面有一个点的每个键.,您可以使用 RegQueryInfoKey() 和 RegEnumKeyEx() 来实现此目的。

  2. 在每个前面有一个点的键中,查看默认值数据:

    a.如果默认值为不是空的, 这足以表明“前面的点键”用于所有 Windows NT 版本中的文件关联,然后尝试打开值数据提到的键名称,只是说提到的键名.

    a1) If there is子项shell\open\command under 提到的键名,然后测试这个key的默认值所指向的路径是否存在;如果该路径存在,则存在与该扩展关联的默认应用程序;如果路径不存在,则默认应用程序未知。要获取文件扩展名描述,请查看默认值提到的键名。要获取程序描述,首先测试以下键是否包含与EXE文件路径相同的值名称,即HKCR\Local Settings\Software\Microsoft\Windows\Shell\MuiCache。如果存在,则查看值数据以获取文件描述;如果不存在,则直接使用 GetFileVersionInfo() 获取文件描述。

    a2) If 没有子项shell\open\command under 提到的键名,则默认应用程序未知。要获取文件扩展名描述,请查看默认值提到的键名.

    b.在 Windows Vista 及更高版本上,当点[a]失败,需要额外检查。如果默认值为empty,测试该键是否有名为的子键OpenWithProgIDs.

    • If OpenWithProgIDs subkey exists,使用RegEnumValue()查找第一个遇到的符合条件的值名称,即name值名称的必须指向现有的键(只是说提到的键名.) 与值名称同名。如果提到的键名存在,这足以表明“前面的点键”用于文件关联。读点a1 and a2以便进行下一步。

    • If OpenWithProgIDs subkey 不存在,默认应用程序未知。要获取文件扩展名描述,请查看默认值提到的键名.

希望有帮助。 :-)

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

从注册表中读取已知的文件扩展名/类型 的相关文章

  • 如何隐藏 WebBrowser 直到网站完成加载/下载过程?

    我想知道我该如何隐藏WebBrowser直到网站加载过程完成 另外 我使用 Panel1 和WebBrowser在它的上面 为什么 好吧 这样 我可以完全像我想要的 WebBrowser 一样设置 Panel1 的大小和位置 然后将 Web
  • Delphi XE2 中的 TDataModule.ClassGroup 伪属性到底有什么作用?

    我尝试将一个组件从一个数据模块复制并粘贴到 Delphi XE2 中的另一个数据模块中 该组件是一个 Fast Report 数据源链接组件 数据模块是全新的 刚刚在 XE2 中创建 其他人也遇到了同样的问题并报告了质量中心为106369
  • Windows 服务和 Windows 进程有什么区别?

    是什么不同之处窗户之间service和一个窗户process 服务是真正的 Windows 进程 没有区别 服务的唯一特殊之处在于它由操作系统启动并在单独的会话中运行 一种独立的方式 可防止其干扰桌面会话 传统上命名为daemon http
  • 使用 php 运行 ipconfig 命令

    我使用这段代码来了解访问者 客户 的一些信息 它一直在我的 Xampp 虚拟服务器上运行 但我无法在我的主服务器 主机 上运行 我只看到一个空白页 info system ipconfig all echo info 这可能对你有帮助 服务
  • 当我启动程序时,Arduino IDE (Win10) 崩溃

    我的 Arduino IDE Win10 上的版本为 1 8 12 在启动时崩溃 运行arduino debug exe我收到此错误消息 C Program Files x86 Arduino gt arduino debug exe Se
  • 如何在 Powershell 中为特定命令设置别名?

    有一个命令我经常输入 java jar foo param1 param2 param n 如何创建命令别名来运行此命令 如下所示 launch foo param3 where launch foo被翻译成完整的命令 你必须创建一个函数
  • shell进程的并行执行

    有没有一个工具可以在 Windows 批处理文件中并行执行多个进程 我发现了一些有趣的 Linux 工具 parallel http mi eng cam ac uk er258 code parallel html and PPSS ht
  • Cygwin setup.exe 在安装 Windows 8 期间挂起?我该怎么继续?

    因此 过去几年我断断续续地使用过 Cygwin 并且安装过几次 但是 我从未在安装过程中经历过安装挂起的情况 发生这种情况时 安装实际上会冻结并且不会 一点 移动 我读到这是一个有点常见问题 http cygwin com ml cygwi
  • TEdit onclick 全选?

    每当用户单击 TEdit1 或单击选择其中的某些文本时 如何选择 TEdit1 的所有文本 执行超出默认行为的任何操作都可能非常危险TEdit控制 您的用户知道标准 Windows 控件的行为方式 任何偏离此的行为都可能导致混乱 默认情况下
  • 向 Windows 任务栏缩略图添加按钮 JavaFX?

    这个问题已经闲置一年多了 我的问题仍然没有解决方案 我编辑此内容是为了澄清我的问题并引起人们对它的新关注 如果您使用 Windows 您可能知道将程序图标悬停在任务栏上时显示的小预览图像 缩略图 某些程序 例如 Spotify Git 扩展
  • Python 原始字符串和尾随反斜杠[重复]

    这个问题在这里已经有答案了 我曾经遇到过一些东西 想知道它是否是一个 Python bug 或者至少是一个错误功能 我很好奇是否有人知道这种行为的任何理由 我刚刚在阅读 Code Like a Pythonista 时想到了这一点 到目前为
  • 如何仅在某些列中设置带有复选框的 TListView?

    我正在使用 Delphi 2010 并且我试图允许用户在 TListView 中的每行 2 个选项之间进行选择 使用 TListView 我可以将样式设置为 vsReport 并启用复选框 但这只会让我每行有 1 个复选框 我需要的是每行
  • C# 同步进程启动

    我正在尝试从一段代码启动一个进程 但我希望代码暂停执行 直到进程完成并退出 目前 我正在使用 System Diagnostics Process Start 类来启动 特别是 卸载程序 并且之后执行的代码确实依赖于安装程序卸载程序在恢复执
  • 如何在 Windows 中使用 cmake 更轻松地链接 gtk 库?

    我现在通过手动包含所有必需的路径 gtk包位于D Tools gtk bundle 2 20 0 20100406 win32 include directories D Tools gtk bundle 2 20 0 20100406 w
  • 有没有办法从 Windows 7 上的 Windows 服务启动 GUI 应用程序?

    我做了很多搜索 寻找一种从 Windows 7 上的 Windows 服务启动 GUI 应用程序的方法 我发现的大部分内容是 Windows 7 服务现在在单独的用户会话中运行 并且无法显示任何图形界面给当前用户 我想知道是否有任何解决方法
  • 使用 Windows Media Foundation 枚举时如何获取硬件 ID

    我在用MFEnumDeviceSources 枚举连接的设备 我正在寻找一个已连接两个的特定网络摄像头 枚举工作正常 我可以打印友好名称这是FLIR Video对于我的两台相机 我正在努力弄清楚如何从 Media Foundation 设备
  • 如何在 Windows 上的 PostgreSQL 中创建具有 UTF-8 排序规则的数据库?

    我正在为 Windows 上的 Bitbucket 服务器配置 PostgreSQL 数据库 在官方guide https confluence atlassian com bitbucketserver connecting bitbuc
  • 更改Word文档中的文本字体颜色

    我写了一个小测试词插件 但找不到方法改变字体颜色一句话 这是我的代码 var wordsList this Application ActiveDocument Words wordsList i Font TextColor WdColo
  • Delphi 2010:如何将 UTF8 编码的 PAnsiChar 转换为 UnicodeString?

    情况 我有一个外部 DLL 它使用 UTF 8 作为其内部字符串格式 接口函数都使用 PAnsiChar 来传递字符串 我的应用程序的其余部分使用 Delphi 的本机string类型 由于我正在使用 Delphi 2010 这将映射到Un
  • TControlState.csDesignerHide 与 TControlStyle.csNoDesignVisible

    VCL 似乎提供了两种向表单设计者隐藏控件的机制 TControlState csDesignerHide and TControlStyle csNoDesignVisible 就 IDE 而言 它们之间有什么区别 什么时候应该使用哪个

随机推荐

  • node.js http 服务器,检测客户端何时断开连接

    我使用express 和node js 作为http 服务器 我存储响应对象 以便可以将事件流式传输到该通道上的客户端 有没有办法检测客户端何时断开连接 当我杀死我的客户端时 我仍然可以写入响应对象 而不会收到任何类型的异常 错误 看起来只
  • 安装 Rails 版本 3.2.15 时出现“Gem::RemoteFetcher::UnknownHostError”

    我之前已经在实时 ubuntu USB 上成功安装了 Rails 3 2 15 并具有数据持久性 现在我已经习惯了操作系统 Ubuntu 12 04 LTS 我已经将它安装在笔记本电脑上 并且正在安装我在实时 USB 中使用的东西 长话短说
  • 更改控制台大小

    Delphi中的简单问题 我创建了一个控制台应用程序 如果控制台窗口的高度少于 80 行 我需要将其高度更改为 80 行 这需要从代码中完成 并且实际上是在代码内有条件的 即 当发生错误时 它会增加控制台的大小 以便整个 巨大的 错误报告可
  • NSIS:在标签中插入链接

    假设我有以下 nsDialog 标签 单击 接受 即表示我同意示例的许可协议和隐私政策 您可以访问需要使用个人信息的功能 欲了解更多信息 请下载示例的内容政策 我想在此标签中插入链接 如下所示 单击 接受 即表示我同意示例的内容许可协议 h
  • 动画 GIF 作为 THREE.js 中的纹理

    我正在寻找一种在 THREE js 中使用 GIF 动画作为纹理的方法 我目前可以加载纹理 甚至是 GIF 格式 但它无法播放动画 有什么办法可以做到吗 我发现了一些像这样的链接 https github com JordiRos GLGi
  • 如何从 JavaScript 变量保存 png

    我在 javascript 变量中有一个以 base64 编码的图像 data image png base64 base64 data 编辑 我需要将该文件保存到磁盘而不要求访问者右键单击 编辑 是否可以 如何 提前致谢 此致 我知道这个
  • 如何从 Rails 中的 RSpec 测试调用应用程序帮助器方法?

    标题是不言自明的 我尝试过的一切都导致了 未定义的方法 澄清一下 我并不是想测试辅助方法 我正在尝试在集成测试中使用辅助方法 您只需在测试中包含相关的帮助程序模块即可使方法可用 describe foo do include ActionV
  • Knockout:避免绑定中的循环更新

    我有一个与接口交互的自定义 绑定Scribe https github com guardian scribe 一个内容可编辑的所见即所得编辑器 当编辑器内容发生变化时 它会更新关联的可观察量 并在关联的可观察量发生变化时更新编辑器 ko
  • 将属性添加到对象数组

    我有一个对象数组 如下所示 Object Results Array 2 Results Array 2 0 1 0 Object id 1 name Rick 1 Object id 2 name david 我想向该对象数组的每个元素添
  • 如何在 Node.js 中无限读取行

    while 1 rl question Command function answer console log answer 刚刚尝试了这段代码 但不是一一输入 而是闪烁 命令 行 我知道 Node js 是非阻塞的 但我不知道如何解决这个
  • 是否可以在 Flutter 的 IconButton 中使用 DropDownButton?

    Update override Widget build BuildContext context return new Container height MediaQuery of context size height child Si
  • 数据湖分析 U-SQL 提取速度(本地与 Azure)

    一直在研究使用 Azure Data Lake Analytics 功能来尝试操作我存储在 Azure Blob 存储中的一些 Gzip 处理的 xml 数据 但我遇到了一个有趣的问题 本质上 当在本地使用 U SQL 处理 500 个 x
  • WordPress:获取自定义类型的所有帖子

    我有这个奇怪的问题 我想获取所有自定义类型的帖子 这是我的代码片段 query new WP Query array post type gt custom post status gt publish while query gt hav
  • ServerEndpoint 和 web.xml

    我有一些 Soap REST servlet 现在还有一个 WebSocket ServerEndpoint game public class WebSocketgame 我有下一个麻烦 如果 web xml 存在 WebSocket 不
  • 使用 google/facebook 和自定义 Nodejs 服务器进行 Firebase 身份验证

    我正在尝试将 firebase 身份验证与我的自定义 Nodejs 服务器集成 电子邮件 密码策略非常简单 因为管理 sdk 支持所需的所有操作 然而 对于提供商来说 文档指示我们手动处理登录流程 https firebase google
  • AttributeError:“模块”对象没有 tf.app.run() 的属性“main”

    我正在尝试测试一个简短的程序 该程序非常简单 如下所示 import numpy as np import tensorflow as tf flags tf app flags FLAGS flags FLAGS import tenso
  • SQL 规范是否提供了一种更好的方法来对两个集合进行异或运算?

    我有一个结果集A即 10 行 1 10 1 2 3 4 5 6 7 8 9 10 and B这是 10 行 由偶数 1 20 组成 2 4 6 8 10 12 14 16 18 20 我想找到一组中的元素 但不是同时找到两者中的元素 行中没
  • 跨子域和主机的 Cookie

    在我使用开发环境和语言组合编写的应用程序中 我需要从两个不同的子域 每个子域位于单独的主机上 访问 cookie cookie 正在设置www mydomain com使用下面的 PHP 代码 我尝试从distant mydomain co
  • 如何以编程方式查找 Swift 的版本?

    我知道我可以找到我现在正在运行的 Swift 版本 恢复到终端并输入 xcrun swift version Swift version 1 1 swift 600 0 57 4 Target x86 64 apple darwin13 4
  • 从注册表中读取已知的文件扩展名/类型

    我想向用户提供已知文件扩展名的列表供他选择 我知道它们通常存储在注册表中的 HKEY CLASSES ROOT 下 如下所示 txt gt 默认 txtfile 其中 txtfile 包含有关关联程序等的信息 不幸的是 注册表中的该位置还存