标签:
Windows 的注册表值有多种类型,如下图:
图一是 REG_SZ 类型的注册表键值。图二是REG_DWORD 类型的。一下分别给出读这两种类型键值的程序:
// 读取 REG_SZ 类型键值的代码
HKEY hKey = NULL; DWORD dwSize = 0; DWORD dwDataType = 0; LPBYTE lpValue = NULL; LPCTSTR const lpValueName = _T("TcpPort"); LONG lRet = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\MSSQLServer\\MSSQLServer\\SuperSocketNetLib\\Tcp"), 0, KEY_QUERY_VALUE, &hKey); if(ERROR_SUCCESS != lRet) { // Error handling (see this FAQ) // return; } // Call once RegQueryValueEx to retrieve the necessary buffer size ::RegQueryValueEx(hKey, lpValueName, 0, &dwDataType, lpValue, // NULL &dwSize); // will contain the data size // Alloc the buffer lpValue = (LPBYTE)malloc(dwSize); // Call twice RegQueryValueEx to get the value lRet = ::RegQueryValueEx(hKey, lpValueName, 0, &dwDataType, lpValue, &dwSize); ::RegCloseKey(hKey); if(ERROR_SUCCESS != lRet) { // Error handling // return; } // Enjoy of lpValue... cout << "port ----------------------- " << lpValue << endl; // free the buffer when no more necessary free(lpValue);
// 此段代码来源:http://forums.codeguru.com/showthread.php?247020-Windows-SDK-Registry-How-can-I-read-data-from-the-registry&s=
// 读取 REG_DWORD 类型的注册表键值代码
long lRet; HKEY hKey; DWORD port; DWORD dwType = REG_DWORD; DWORD dwValue; lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\MSSQLServer\\Client\\SuperSocketNetLib\\Tcp", 0, KEY_QUERY_VALUE, &hKey ); //打开注册表 if(lRet == ERROR_SUCCESS)//读操作成功 { lRet = RegQueryValueEx( hKey, "DefaultPort", 0, &dwType, (LPBYTE)&port, &dwValue ); //如果打开成功,则读 if(lRet == ERROR_SUCCESS) { printf("\n打开成功,则读:"); cout << "DefaultPort: " << port << endl; //mcfile << "DefaultPort: " << port << endl; mcfile << "<port>" << port << "</port>" << endl; } //以下是读取失败 else { printf("\n读取失败:"); } } //以下是打开失败 else { printf("\n打开失败:"); } RegCloseKey(hKey);//记住,一定要关闭
可能的头文件:
#include <winsock2.h>
#include <Windows.h>
标签:
原文地址:http://www.cnblogs.com/duanguyuan/p/4320604.html