读注册表   
   
数据源信息存放在  
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI   
    
驱动程序信息存放在   
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI

附:

    HKEY hKey;
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\ODBC\\ODBC.INI",0,KEY_READ,&hKey);
    
    DWORD dwSubKeyCount,dwMaxSubKeyNameLength;
    RegQueryInfoKey(hKey,NULL,NULL,NULL,&dwSubKeyCount,&dwMaxSubKeyNameLength,NULL,NULL,NULL,NULL,NULL,NULL);
    
    long index = 0;

    char* szSubKeyName = new char[dwMaxSubKeyNameLength+1];
    DWORD dwSubKeyName;
    for (index=0;index<(long)dwSubKeyCount;index++)
    {
        RegEnumKeyEx(hKey,index,szSubKeyName,&dwSubKeyName,NULL,NULL,NULL,NULL);
    }
    RegCloseKey(hKey);

    RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources",0,KEY_READ,&hKey);
    
    DWORD dwValueCount,dwMaxValueNameLength;
    RegQueryInfoKey(hKey,NULL,NULL,NULL,NULL,NULL,NULL,&dwValueCount,&dwMaxValueNameLength,NULL,NULL,NULL);    
    
    char* szValueName = new char[dwMaxValueNameLength+1];
    DWORD dwValueName;

    for (index=0;index<(long)dwValueCount;index++)
    {
        RegEnumValue(hKey,index,szValueName,&dwValueName,NULL,NULL,NULL,NULL);
    }

    RegCloseKey(hKey);
    hKey 
    当前打开键的句柄或下列预定义保留的句柄值: 
    HKEY_CLASSES_ROOT
    HKEY_CURRENT_CONFIG
    HKEY_CURRENT_USER
    HKEY_LOCAL_MACHINE
    HKEY_USERS

    samDesired 
    制定一个访问标记以描述访问新键的安全性
    此参数可以是下列值的一个联合 
    KEY_ALL_ACCESS
    KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, 和 KEY_SET_VALUE 访问的联合. 
    KEY_CREATE_LINK
    允许创建严格符号的链接. 
    KEY_CREATE_SUB_KEY
    允许创建子键. 
    KEY_ENUMERATE_SUB_KEYS
    允许枚举子键. 
    KEY_EXECUTE
    允许读访问. 
    KEY_NOTIFY
    允许改变通知. 
    KEY_QUERY_VALUE
    允许查询子键的数据. 
    KEY_READ
    KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, 和 KEY_NOTIFY 访问的联合. 
    KEY_SET_VALUE
    允许设置子键的数据. 
    KEY_WRITE
    KEY_SET_VALUE 和 KEY_CREATE_SUB_KEY 访问的联合. 


    LONG RegOpenKeyEx(
    HKEY hKey,                        // 待打开的键的句柄
    LPCTSTR lpSubKey,                // 待打开的子键名称的地址
    DWORD ulOptions,                // 保留的,必须为0. 
    REGSAM samDesired,                // 安全访问标记
    PHKEY phkResult                    // 待打开的键的句柄的地址
    );

    LONG RegQueryInfoKey(
    HKEY hKey,                        // 待查询的键的句柄
    LPTSTR lpClass,                    // 类字符串缓冲器地址
    LPDWORD lpcbClass,                // 类字符串缓冲器大小的地址
    LPDWORD lpReserved,                // 保留的,必须为 NULL.
    LPDWORD lpcSubKeys,                // 子键数目缓冲器的地址
    LPDWORD lpcbMaxSubKeyLen,        // 最长的子键名称长度缓冲器的地址
    LPDWORD lpcbMaxClassLen,        // 最长的类字符串长度缓冲器的地址
    LPDWORD lpcValues,                // 值项数目缓冲器的地址
    LPDWORD lpcbMaxValueNameLen,    // 最长的值名称长度缓冲器的地址
    LPDWORD lpcbMaxValueLen,        // 最长的值数据长度缓冲器的地址
    LPDWORD lpcbSecurityDescriptor,    // 安全描述符长度缓冲器的地址
    PFILETIME lpftLastWriteTime        // 最近写入时间缓冲器的地址
    );

    LONG RegEnumKeyEx(
    HKEY hKey,                        // 待枚举的键的句柄
    DWORD dwIndex,                    // 待枚举的子键的索引
    LPTSTR lpName,                    // 子键名称缓冲器的地址
    LPDWORD lpcbName,                // 子键缓冲器大小的地址
    LPDWORD lpReserved,                // 保留的,必须为 NULL.
    LPTSTR lpClass,                    // 类字符串缓冲器的地址
    LPDWORD lpcbClass,                // 类缓冲器大小的地址
    PFILETIME lpftLastWriteTime        // 键的最近写入时间的地址
    );

[FAQ]VC读取数据源列表和驱动程序列表相关推荐

  1. R语言scan函数读取文件为向量或者列表格式实战

    R语言scan函数读取文件为向量或者列表格式实战 目录 R语言scan函数读取文件为向量或者列表格式实战 #基本语法

  2. springboot动态多数据源配置和使用(从数据库读取数据源配置)(三)

    上两遍已经描述了动态多数据源的原理和基础实现了,前面的数据源配置都是从application.yml中配置多数据源的,这里再拓展补充一下其他场景,如何读取数据源不从application.yml中配置 ...

  3. python列表分割_python列表分割

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! ①list从list列表下标a起取值,每次加b在取值,直到大于或等于list长度 ...

  4. linux元组和列表的区别,列表,元组,集合

    一 列表 列表是可变类型的序列,而元组与字符串是不可变类型的序列 1.列表的定义: # 定义一个空列表 In [21]: list = [] In [22]: type(list)# 通过python ...

  5. python定义一个函数列表排序_Python 列表(修改、添加、删除、排序)

    Python的基本数据类型有整数,浮点数,布尔,字符串,它们是最基本的数据.在实际编程中,我们要经常组织由很多基本数据组成的集合,这些集合的不同组织方式就是:数据结构,今天讲的是数据结构中的Pytho ...

  6. 鸿蒙的应用列表,图解鸿蒙列表组件ListContainer

    一.什么是ListContainer ListContainer是用来呈现连续.多行数据的列表组件,包含一系列相同类型的列表项.如下图所示: 二.ListContainer的架构视图 ListCont ...

  7. 舔狗是这样实现列表过滤和列表排序滴

    如果你是一个舔狗,又不会写舔狗日记,又恰好会一点点Vue的话,恭喜你这篇舔狗拯救手册可以帮助你顺利处到 {} 干活干活!首先搭建好Vue基本模板 <body><div id=&quo ...

  8. python分析微博粉丝_新浪微博Python SDK笔记——获取粉丝列表或关注列表 | 学步园...

    上一节中创建了一个initclient包,封装了授权的过程,通过获取的myAPIClient对象可以直接调用API接口进行微博操作,上一节中就调用了发微博的接口发了一条新微博.这一节还是直接使用ini ...

  9. linux 查看文件列表,linux显示文件列表命令ls,使用ls --help列出所有命令参数

    ls命令的相关参数 在提示符下输入ls --help ,屏幕会显示该命令的使用格式及参数信息: 先介绍一下ls命令的主要参数: -a 列出目录下的所有文件,包括以 . 开头的隐含文件. -A 显示除 ...

最新文章

  1. php 数组接在数组后面,PHP array_splice()接合数组用法的简单介绍
  2. hdu5014 构造b数列使得t最大(小想法)
  3. pandas中的DataFrame数据结构
  4. 《疯狂JAVA讲义》3
  5. java后端开发每天遇到的jsp,了解一下
  6. 【转】oracle sequence
  7. 透明色代码是多少_北京宣传画册印刷多少钱
  8. Centos7.5-文件的归档和压缩
  9. 初识FPGA(搬运)
  10. rust 编程入门_面向初学者的Rust –最受欢迎的编程语言入门
  11. centos7下源码安装mysql5.6_Centos7 源码安装mysql5.6
  12. 初始化Metasploit-Framework
  13. 蓝湖 for Mac(自动切图sketch插件)中文版
  14. matlab的比较器模块,simulink中比较器
  15. GB2312-80 所有汉字排序-拼音
  16. 强密码生成器(C++)
  17. 流媒体服务器开源方案调研
  18. 使用pandas的merge出现Empty DataFrame 和 Index: []
  19. 世上真有后悔药,删除的数据文件可恢复,6款免费数据恢复软件
  20. UR机器人装箱姿态_ur机器人坐标系说明来了,感兴趣的朋友可以看看

热门文章

  1. tp5 模型中配置数据库连接信息
  2. aop-xml-环绕增强
  3. html5该怎么样学习?零基础入门HTML5学习路线
  4. redis雪崩解决方案
  5. VS 编程常见错误及解决方法
  6. step3 . day6数据结构之非线性表 满二叉树和不完全二叉树
  7. ThinkPHP 模板循环语法
  8. 深入理解JavaScript的闭包特性如何给循环中的对象添加事件
  9. 由java的八个基本数据类型说开去
  10. winform界面闪退