C/C++/VC++/mfc对注册表的操作

来源:互联网 发布:进销存软件免费下载 编辑:程序博客网 时间:2024/05/09 01:39

#include<string.h>
#include<stdio.h>
#include<Windows.h>
void main()
{   HKEY hKey;
    DWORD BufSize;
  char ntEnvBuf[456];
char * rc;
 if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, "Software\\Staffware plc\\Staffware Server\\Nodes\\staffw_nod1\\admin", 0L,
     KEY_EXECUTE, &hKey) != ERROR_SUCCESS)
 {
  rc = NULL;
  printf("here1\n");
 }
 else
 {
  if (RegQueryValueEx (hKey,"DEBUG", NULL, NULL,
         (LPBYTE)(ntEnvBuf),
         &BufSize) != ERROR_SUCCESS)
  {
   rc =  NULL;
   printf("here2\n");
  }
  RegCloseKey (hKey);
  rc = ntEnvBuf;
 }
 printf("%s\n",rc);

}

/////////////////////////////////////////////

上面只是对注册表中已经存在的键的访问

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

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

 

////////////////////////////////////////////////////////////////////////////

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;
      }
  }

原创粉丝点击