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等)
煮酒论英雄