delphi中枚举注册表子项

2024-04-09

我试图根据服务器上安装的 MySQL 版本在客户端计算机上安装驱动程序,为此我想通过注册表项检查服务器上的版本。

也就是说,我需要枚举的子项HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB。该键下通常只有一个键,其形式通常为:MySQL Server #.#,其中 # 代表数字。

但是因为我不知道这些值是什么,有没有办法获取密钥,然后我可以从名称中获取数字来确定要安装哪个驱动程序?我认为枚举子项是获取密钥的最佳方法,但也许巧妙的字符串格式和循环也可以工作?


最好的解决方案是枚举子键。使用RegEnumKeyEx您只需在一个简单的循环中执行此操作,直到没有更多的键可供枚举。

然而,在 Delphi 中使用枚举子键TRegistry甚至更容易:

program _EnumSubKeys;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes, Windows, Registry;

procedure EnumSubKeys(RootKey: HKEY; const Key: string);
var
  Registry: TRegistry;
  SubKeyNames: TStringList;
  Name: string;
begin
  Registry := TRegistry.Create;
  Try
    Registry.RootKey := RootKey;
    Registry.OpenKeyReadOnly(Key);
    SubKeyNames := TStringList.Create;
    Try
      Registry.GetKeyNames(SubKeyNames);
      for Name in SubKeyNames do
        Writeln(Name);
    Finally
      SubKeyNames.Free;
    End;
  Finally
    Registry.Free;
  End;
end;

begin
  EnumSubKeys(HKEY_LOCAL_MACHINE, 'Software\Microsoft');
  Readln;
end.

您应该注意的一件事是必须在注册表的 64 位视图中进行搜索。如果您安装了 64 位版本的 MySQL,那么我希望它使用 64 位注册表视图。在 64 位操作系统上的 32 位 Delphi 进程中,您将需要回避注册表重定向。通过传递来做到这一点KEY_WOW64_64KEY to the TRegistry构造函数。


您建议的替代方案是将版本字符串的所有可能值硬编码到您的应用程序中。这听起来像是一旦发布不在硬编码列表中的版本,就会发生故障。

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

delphi中枚举注册表子项 的相关文章

  • 如何更改 Chromium 组件的默认背景颜色?

    I use TChromium http code google com p delphichromiumembedded 我分配AWebPageAsString这是一个带有灰色背景颜色的静态 HTML 页面 FBrowser TChrom
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • 如何添加资源并使用它们

    在我的应用程序中 我想添加 2 个图像作为资源 我想使用这些图像 当我在应用程序中单击 是 按钮时 第一张图像将被设置为壁纸 当我在应用程序中单击 否 按钮时 第二张图像将被设置为桌面壁纸 提前致谢 regards 最简单的方法是创建一个文
  • 我可以在“Delphi 2007 for Win32”中使用.NET DLL吗?

    是否可以在 Delphi 2007 for Win32 中使用 NET DLL 我尝试以与 ActiveX 组件相同的方式导入 DLL 但它似乎不起作用 组件菜单 gt 导入组件 gt 导入 NET 程序集 是否可能 如果可以 步骤是什么
  • VCL.位图到 FMX.位图

    我在网上找到了这段代码 但 FMX Bitmap 没有扫描线 是否可以以某种方式将 VCL TBitmap 复制或绘制到 FMX Bitmap IFDEF MSWINDOWS type TBitmap FMX Types TBitmap T
  • 如何在 Vista 上安装 Delphi 7

    我多次尝试在 Vista 上安装 Delphi 7 但 Vista 告诉我此应用程序 Delphi 7 存在已知问题 从而阻止了我这样做 我公司的其他几个人在 Vista 上安装 D7 时遇到了问题 由此得出的结论是 我们的 D7 应用程序
  • 如何在Delphi XE中通过名称获取类类型引用?

    我实际上正在尝试使用 Rtti 来实现通用方法调用程序 它应该像这样工作 我将提供类名 方法名和参数 调用者将通过调用此类的指定方法来完成其工作 因此 我需要类引用才能获取其 Rtti 信息并寻找我想要调用的方法 有没有办法在不实现我想要使
  • Delphi线程死锁

    我有时会在销毁某些线程时遇到死锁问题 我尝试过调试该问题 但在 IDE 中调试时似乎从未存在死锁 可能是因为 IDE 中的事件速度较低 问题 当应用程序启动时 主线程会创建多个线程 线程始终处于活动状态并与主线程同步 完全没有问题 当应用程
  • delphi 变量值在循环中的线程中发生变化

    我的代码正在运行一个 for 循环来处理一些数据 如下所示 procedure printValue Value Integer begin TThread Synchronize TThread Current procedure beg
  • Async InputQuery 不处理“取消”按钮

    我正在使用一个简单的调用TDialogServiceAsync InputQuery 使用单个输入 它只是忽略了Cancel按钮和窗口的X关闭按钮 But the Ok按钮工作正常 这是我的代码 uses FMX DialogService
  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 以编程方式重新启动 Delphi 应用程序

    应该不可能运行我的应用程序的多个实例 因此项目源码包含 CreateMutex nil False PChar ID if GetLastError ERROR ALREADY EXISTS then Halt 现在我想以编程方式重新启动我
  • Word 2010 自动化:“转到书签”

    我有一个用 Delphi 7 编写的程序 它打开一个基于模板的新 Word 文档 文档打开后 系统会自动跳转到书签 在模板中预定义 并在其中添加一些文本 以下代码在 Word 2003 中工作正常 但会导致invalid variant o
  • delphi中如何实现多重继承?

    我正在对一个旧库进行完全重写 我不确定如何处理这种情况 为了便于理解 大家都欢呼自行车类比 我有以下课程 TBike 自行车本身 TBikeWheel 自行车的一个轮子 TBikeWheelFront and TBikeWheelBack
  • TObjectList.Contains 导致 Delphi 2009 中的访问冲突

    在 Delphi 2009 中 到目前为止 我在泛型方面没有遇到大问题 使用 Generics Collections 列表 没有特殊的泛型功能 现在我发现这段代码会在访问的行中导致AVMyList Contains 如果我声明 TMyLi
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba
  • Delphi 6 命令行编译:无 DCU

    当对 dpr 文件使用 dcc32 时 它会生成一个 dll 但不会生成 dcu 项目级别 cfg 使用 N 开关设置路径 但指定的目录中没有任何内容 当 E 开关正在工作时 它必须看到 cfg 我尝试在调用 dcc32 之前对 dpr 文
  • 如何将纹理传递给 DirectX 9 像素着色器?

    我有像素着色器 fxc exe tiles fs T ps 3 0 Fotiles fsc Fctiles fsl struct PSInput float4 Pos TEXCOORD0 float3 Normal TEXCOORD1 fl
  • 所见即所得与 Unicode

    我在 Delphi 中编写了一个 Windows 程序 该程序使用 GetCharWidth 和 Em Square 将文本非常精确地放置并换行到屏幕和打印机 这对于 ANSI 文本效果很好 您只需要检索和计算 255 个字符的宽度 但当您

随机推荐

  • 使用 sqlalchemy 从相关表中仅选择一行

    假设我有一个作者表和一个帖子表 每个作者可以有多个帖子 现在 随着singlesqlalchemy 查询 我想获取所有活跃作者以及每个作者最近发布的帖子 我一直在尝试通过获取加入作者的帖子列表来解决此问题 使用子查询将结果分组在一起 如下所
  • 带有 Firebase 数据的 Angular 应用:为什么我看到上一页的数据?

    因此 我有一个托管在 Firebase 上的 Angular 9 应用程序 并使用 Firestore 存储数据 我有一个看起来很简单的问题 但我无法理解为什么会发生这种情况 我已经对应用程序进行了很多简化 以找到此问题的根本原因 并将尽力
  • 检查条件是否适用于列表中任何元素的 Pythonic 方法

    我有一个 Python 列表 我想检查是否有任何元素为负数 是否有一个简单的函数或语法可以用来对所有元素应用 是否为负 检查 并查看其中是否有任何元素为负 我浏览了文档 http docs python org library stdtyp
  • 在postgres中,可以查询当前的监听器吗?

    in the notify listen对于 postgres 一个人会听 listen channel 有没有办法查询会话正在侦听的当前频道 到目前为止已经幸运地完成了医生的检查 select from pg listening chan
  • 类型“AngularFireList<{}>”上不存在属性“map”

    我很难弄清楚这个问题 当我运行时出现以下错误离子服务 类型 AngularFireList 上不存在属性 map 我已经寻找修复程序有一段时间了 但找不到任何有效的方法 所以我在这里 当前版本是 Ionic Framework 3 9 2
  • PHP 读取 CSV 并按日期过滤

    我有以下 CSV Date Event Description 24 01 2010 Football Football practice for all Years 24 01 2010 Cricket Cricket Practice
  • 多个数组元素的组合

    最近我实现了下面的代码 假设我有 2 个数组 arr1 a b c arr2 d e 并且应该是 output ad ae bd be cd ce 现在假设我有多个数组 for eg arr1 a b c arr2 d e arr3 f g
  • 如何使用 php 列出目录以在文件夹中导航,而不使用 javascript? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找这个 PHP 函数 列出目
  • android.view.InflateException:使用自定义视图时的二进制 XML 文件行

    例外情况 gt 10 13 11 47 32 151 E AndroidRuntime 618 FATAL EXCEPTION main gt gt 10 13 11 47 32 151 E AndroidRuntime 618 andro
  • 如何从Oracle数据库获取自增PK? [复制]

    这个问题在这里已经有答案了 可能的重复 PLSQL JDBC 如何获取最后一行ID https stackoverflow com questions 3552260 plsql jdbc how to get last row id 我已
  • ASP.NET Core Identity - LoginPartial 在脚手架身份后损坏

    我从 VS 2017 模板 具有个人用户帐户的 Web 应用程序 创建了一个新项目 这会将 ASP NET Core Identity 添加为默认 UI 使用 nuget 中的 UI services AddDefaultIdentity
  • 如何在功能上处理来自外部系统的状态?

    我最近进入了函数式编程 并且学习了几种以引用透明的方式处理某些副作用的方法 国家单子 http apocalisp wordpress com 2011 03 20 towards an effect system in scala par
  • 如何将 XSL 嵌入到 XML 中

    我正在寻找一种将 XSL 嵌入 XML 的解决方案 这样只有 1 个 XML 文件发送到浏览器 我在这里尝试了 Dimitre Novatchev 提出的解决方案 将 xsl 嵌入到 XML 文件中 https stackoverflow
  • 创建显示上一张和下一张图像的一部分的图像滑块

    我正在尝试使用 jQuery 创建幻灯片 类似于jquery 滚动水平 http jquery malsup com cycle scrollhv html 但我希望部分显示上一张和下一张图像 现在 我拥有的是一个 div 隐藏了溢出 其中
  • 使用Python从sql server数据库检索数据

    我正在尝试执行以下脚本 但没有得到所需的结果 也没有得到错误消息 import pyodbc cnxn pyodbc connect Driver SQL Server Native Client 11 0 Server mySRVERNA
  • 从 Ajax 调用 Django View

    我正在使用 Ajax 以及 Django 在按钮单击时执行一些操作 我成功调用了 javascript 函数 但无法调用 Django 视图 没有错误 但我认为打印语句没有打印 urls py urlpatterns patterns po
  • 访问结构体中的位域

    我对位字段概念很陌生 我正在尝试访问结构中的元素 但它显示错误aa v像这样 error incompatible types when assigning to type cc from type long unsigned int 如果
  • 启动设置活动以获得结果

    在我的应用程序中 我正在检查用户设备上是否启用了 GPS 如果没有 我想将他发送到 设置 以让他将其打开 Intent intent new Intent Settings ACTION LOCATION SOURCE SETTINGS s
  • 使用(独立)模块化项目安装多个 Composer

    我正在尝试找到使用 Composer 实现模块化结构的最佳方法 假设我有这个框架树 cms site addons 假设开发人员可以使用插件来添加他们的项目composer json安装 喜欢 site addons MyNewFeatur
  • delphi中枚举注册表子项

    我试图根据服务器上安装的 MySQL 版本在客户端计算机上安装驱动程序 为此我想通过注册表项检查服务器上的版本 也就是说 我需要枚举的子项HKEY LOCAL MACHINE SOFTWARE MySQL AB 该键下通常只有一个键 其形式