VC++ 中对注册表的操作

2016-02-19 20:11 5 1 收藏

今天图老师小编给大家介绍下VC++ 中对注册表的操作,平时喜欢VC++ 中对注册表的操作的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

VC++ 中对注册表的操作

作者:lixiaosan
日期:04/29/2006

这里只是对注册表的几个api函数的使用简介。在MFC中,你可以使用CRegKey类操作注册表,关于CRegKey类在这里就不做介绍了,可以参考msdn。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

以下代码实现了在HKEY_LOCAL_MACHINE的SOFTWARE下打开MyProgram键,如果MyProgram不存在,则创建之,存在则进行查询

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

 HKEY hKEY;
 HKEY hKEYResult;
 LPCTSTR lpszSubKey;
 LPCTSTR lpszValueName;
 LONG ret;
 DWORD dwType;
 DWORD dwSize;
 
 hKEY = HKEY_LOCAL_MACHINE;
 lpszSubKey = _T("SOFTWAREMyProgram");

 ret = RegOpenKeyEx(
               hKEY,                                      // 根键
               lpszSubKey,                           // 子键
               0,                                             // 必须为0
               KEY_ALL_ACCESS,            // 访问权限
               &hKEYResult);                     // 保存打开的键的句柄
           
 if (ret != ERROR_SUCCESS)       // 若打开失败,则进行创建
 {
     ret = RegCreateKeyEx(
                   hKEY,                                                   // 根键
                   lpszSubKey,                                       // 子键
                   0,                                                          // 必须为0
                   NULL,                                                  // 键的class
                   REG_OPTION_NON_VOLATILE,  // 永久保持
                   KEY_READ|KEY_WRITE,               // 访问权限
                   NULL,                                                 // 安全属性
                   &hKEYResult,                                   // 保存打开的键的句柄
                   NULL);
    if (ret != ERROR_SUCCESS)
    {
        MessageBox(_T("Create failed!"));
        RegCloseKey(hKEYResult);        // 使用完记得关闭句柄
        return;
      }
      else
      {
          lpszValueName = _T("Number");
          DWORD dwNumber = 10; 
          ret = RegSetValueEx(
                        hKEYResult,                                // 打开的句柄
                        lpszValueName,                         // 键名
                        0,                                                   // 必须为0
                        REG_DWORD,                           // 键类型
                        (CONST BYTE*)&dwNumber, // 需存储的数据
                        sizeof(DWORD));                       // 数据长度

          lpszValueName = _T("Date");
          LPCTSTR lpszDate = _T("2006/4/29");
          ret = RegSetValueEx(
                        hKEYResult,
                        lpszValueName,
                        0,
                        REG_SZ,
                        (CONST BYTE*)lpszDate,
                        MAX_PATH);
                        RegCloseKey(hKEYResult);
      }
  }
  else // 如打开成功,则进行查询
  {
      lpszValueName = _T("Number");
      dwType = REG_DWORD;
      DWORD dwRes = 0;
      dwSize = sizeof(DWORD);
      ret = RegQueryValueEx(
                    hKEYResult,               // 打开的句柄
                    lpszValueName,        // 查找的键名
                    0,                                  // 必须为0
                    &dwType,                    // 键类型
                    (BYTE*)&dwRes,      // 返回的数据
                    &dwSize);                   // 数据长度
      if (ret != ERROR_SUCCESS)
      {
          MessageBox(_T("Create failed!"));
          RegCloseKey(hKEYResult);
          return;
      }
     
      lpszValueName = _T("Date");
      dwType = REG_SZ;
      dwSize = MAX_PATH;
      BYTE *pByteSubKey = new BYTE[MAX_PATH];
      ZeroMemory(pByteSubKey, MAX_PATH);
      ret = RegQueryValueEx(
                    hKEYResult,
                    lpszValueName,
                    0,
                    &dwType,
                    pByteSubKey,
                    &dwSize);
      RegCloseKey(hKEYResult);
      delete []pByteSubKey;
      pByteSubKey = NULL;
      if (ret != ERROR_SUCCESS)
      {
          MessageBox(_T("Create failed!"));
          RegCloseKey(hKEYResult);
          return;
      }
  }

来源:https://www.tulaoshi.com/n/20160219/1622988.html

延伸阅读
以前导出数据的时候都是自己定义格式,自己来解析,或者直接导出到TXT里,这显然不能满足用户的继续编辑的要求,所以我用自动化技术写了几个函数可以将数据导出到word和excel中,仅仅是标格数据。。。 这个过程是这样的:http://blog.csdn.net/hoya5121 在VC6的类向导中的AUTOMATION页筐中“ADD CLASS”,然后选择“from a type”,浏览到off...
标签: windows10
Win10注册表中右键跳转的操作方法   操作方法: 1、以SYSTEM项为例,在HKEY_LOCAL_MACHINE中右键点击SYSTEM后,菜单底部会出现跳转到HKEY_CURRENT_USER中SYSTEM的选项,点击之后即可完成跳转。 2、点击Go to HKEY_LOCAL_MACHINE后,从HKEY_CURRENT_USER中SYSTEM跳转到该项目同名项。 3、同理,在跳转之后,如果在HK...
标签: 电脑入门
Win9X篇 C:WindowsSYSTEM.DAT和C:WindowsUSER.DAT 这2个就是注册表文件 .另外,系统每天启动的第一次都会做一个备份,储存在C:WINDOWSSYSBCKUP下,以rb***.cab命名,在DOS下可以用scanreg /restore还原。 第一次安装完以后,在C盘根目录下还有一个SYSTEM.1ST文件作为第一次启动的备份。 Win2000/XP/NET篇 其中用户配置文件保存在根目录Do...
标签: 电脑入门
注册表虽然是通过各个根键和子键来分类管理各种信息,但具体数据信息还是依靠键值项和键值来实现。在注册表中绝大多数分支或子项中还包含了一个或若干个值项,每个值项又对应于一定数据类型的一组数据,这就是键值项和键值,打开注册表编辑器后,选择一个分支或子项,在注册表编辑器的右侧窗口中显示的就是键值项和键值(如图1)。 图1 细心...
----毫不夸张的说,注册表相当于WIN95的“心”,几乎所有的Windows应用程序都毫不例外的要在这里边“安家筑巢”,如果你也用VB编写了一个程序,是不是也想在注册表里占有一席之地呢(即使刚才没有,现在大概也有了吧)?嗯,听我慢慢道来。 ----“API”中专门提供了处理注册表的函数,不用说也知道,它们肯定功能强大(因为它们是API)...

经验教程

178

收藏

98
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部