windows注册表的基本使用——示例

上网找好多资料发现一个问题就是太老。例如只有RegCreateKey而没有RegCreateKeyEx用法详解,自己摸索了几个小时终于基本用到的几个函数都试用了一遍。

 

下面代码已经通过编译测试

  1 // test__regedit.cpp : 定义控制台应用程序的入口点。
  2 //
  3 
  4 #include "stdafx.h"
  5 
  6 #include <windows.h>
  7 #include <iostream>
  8 
  9 #include <vld.h>
 10 
 11 void test__create_regedit()
 12 {
 13     LPCTSTR lpSubKeyGOCOM = TEXT("SOFTWARE\\GoCom5.5");
 14     HKEY hKeyGOCOM = NULL;
 15     DWORD dwDisposition;//是否存在
 16     if ( ERROR_SUCCESS==::RegCreateKeyEx(HKEY_LOCAL_MACHINE, lpSubKeyGOCOM, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKeyGOCOM, &dwDisposition) )
 17     {
 18         std::cout << "RegCreateKeyEx successful" << std::endl;
 19         if (REG_CREATED_NEW_KEY==dwDisposition)
 20         {
 21             std::cout << "key create" << std::endl;
 22         }
 23         else
 24         {
 25             std::cout << "key open" << std::endl;
 26         }
 27 
 28         LPCTSTR lpAutoRun = TEXT("auto_run");
 29         LPCTSTR lpAutoRunVal = TEXT("TRUE");
 30         if ( ERROR_SUCCESS==::RegSetValueEx(hKeyGOCOM, lpAutoRun, 0, REG_SZ, (BYTE*)lpAutoRunVal, (lstrlen(lpAutoRunVal)+1)*sizeof(TCHAR)) )
 31         {
 32             std::cout << "value successful" << std::endl;
 33         }
 34         else
 35         {
 36             std::cout << "value fail" << std::endl;
 37         }
 38 
 39         LPCTSTR lpAutoRun2 = TEXT("auto_run2");
 40         DWORD dw32AutoRunVal2 = 12;
 41         if ( ERROR_SUCCESS==::RegSetValueEx(hKeyGOCOM, lpAutoRun2, 0, REG_DWORD, (BYTE*)&dw32AutoRunVal2, sizeof(DWORD)) )
 42         {
 43             std::cout << "value2 successful" << std::endl;
 44         }
 45         else
 46         {
 47             std::cout << "value2 fail" << std::endl;
 48         }
 49 
 50 
 51         LPTSTR lpAutoRunValret = (LPTSTR)malloc(20*sizeof(TCHAR));
 52         DWORD cbAutoRunValret = 20*sizeof(TCHAR);
 53         ZeroMemory(lpAutoRunValret, 20);
 54         if ( ERROR_SUCCESS==::RegGetValue(HKEY_LOCAL_MACHINE, lpSubKeyGOCOM, lpAutoRun, RRF_RT_REG_SZ, NULL, lpAutoRunValret, &cbAutoRunValret) )
 55         {
 56             std::cout << "value get successful" << std::endl;
 57         }
 58         else
 59         {
 60             std::cout << "value get fail" << std::endl;
 61         }
 62         free(lpAutoRunValret);
 63 
 64 
 65         DWORD dwAutoRunValret2;
 66         DWORD cbAutoRunValret2 = sizeof(DWORD);
 67         if ( ERROR_SUCCESS==::RegGetValue(HKEY_LOCAL_MACHINE, lpSubKeyGOCOM, lpAutoRun2, RRF_RT_DWORD, NULL, (PVOID)&dwAutoRunValret2, &cbAutoRunValret2) )
 68         {
 69             std::cout << "value2 get successful" << dwAutoRunValret2 << std::endl;
 70         }
 71         else
 72         {
 73             std::cout << "value2 get fail" << std::endl;
 74         }
 75 
 76 
 77         LPTSTR lpAutoRunValret3 = (LPTSTR)malloc(20*sizeof(TCHAR));
 78         DWORD cbAutoRunValret3 = 20*sizeof(TCHAR);
 79         ZeroMemory(lpAutoRunValret, 20);
 80         if ( ERROR_SUCCESS==::RegSetValueEx(hKeyGOCOM, lpAutoRun, 0, RRF_RT_REG_SZ, (BYTE*)lpAutoRunValret3, cbAutoRunValret3) )
 81         {
 82             std::cout << "value get successful" << std::endl;
 83         }
 84         else
 85         {
 86             std::cout << "value get successful" << std::endl;
 87         }
 88         free(lpAutoRunValret);
 89 
 90 
 91         DWORD dwAutoRunValret4 = -1;
 92         DWORD cbAutoRunValret4 = sizeof(DWORD);
 93         if ( ERROR_SUCCESS==::RegSetValueEx(hKeyGOCOM, lpAutoRun, 0, RRF_RT_DWORD, (BYTE*)dwAutoRunValret4, cbAutoRunValret4) )
 94         {
 95             std::cout << "value2 get successful" << std::endl;
 96         }
 97         else
 98         {
 99             std::cout << "value2 get successful" << std::endl;
100         }
101 
102     }
103     else
104     {
105         std::cout << "RegCreateKeyEx fail" << std::endl;
106     }
107     if (hKeyGOCOM!=NULL)
108     {
109         ::RegCloseKey(hKeyGOCOM);
110     }
111 }
112 void test__open_regedit()
113 {
114     LPCTSTR lpSubKeyGOCOM = TEXT("SOFTWARE\\GoCom5.5");
115     HKEY hKeyGOCOM = NULL;
116     if ( ERROR_SUCCESS==::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKeyGOCOM, 0, KEY_ALL_ACCESS|KEY_READ|KEY_WRITE, &hKeyGOCOM) )
117     {
118         std::cout << "RegOpenKeyEx successful" << std::endl;
119     }
120     else
121     {
122         std::cout << "RegOpenKeyEx fail" << std::endl;
123     }
124     if (hKeyGOCOM!=NULL)
125     {
126         ::RegCloseKey(hKeyGOCOM);
127     }
128 }
129 
130 int _tmain(int argc, _TCHAR* argv[])
131 {
132     test__open_regedit();
133     test__create_regedit();
134     return 0;
135 }

 

由于时间关系还有很多函数没有用到,等以后以机会在放上来吧(例如:RegQueryInfoKey等)

 

posted @ 2014-09-17 15:42  仙人球球  Views(450)  Comments(0Edit  收藏  举报