RegQueryValueEx函数
RegQueryValueEx函数检索与开放注册表键关联的指定值名称的类型和数据。
LONG RegQueryValueEx(
HKEY,            // handle to key
LPCTSTR,  // value name
LPDWORD,  // reserved
LPDWORD,      // type buffer
LPBYTE,        // data buffer
LPDWORD      // size of data buffer
);
参数
hKey:当前打开的密钥或以下预定义密钥之⼀的句柄:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
Windows NT/2000/XP: HKEY_PERFORMANCE_DATA
Windows XP: HKEY_PERFORMANCE_TEXT
HKEY_PERFORMANCE_NLSTEXT
Windows 95/98/Me: HKEY_DYN_DATA
字符串函数注册登录
lpValueName:指向⼀个以null结尾的字符串的指针,该字符串包含要查询的值的名称。如果lpValueName是NULL或空字符串“”,函数将检索键的未命名或默认值(如果有的话)的类型和数据。
Windows 95/98/Me:每个键都有⼀个默认值,最初不包含数据。在Windows 95上,默认值类型总是REG_SZ。在Windows 98上,键的默认值的类型最初是REG_SZ,但是RegSetValueEx可以指定具有不同类型的默认值。
Windows NT/2000/XP:键不⾃动具有未命名或默认值。未命名值可以是任何类型。
lpReserved:保留;必须为NULL。
lpType:指向⼀个变量的指针,该变量接收指⽰存储在指定值中的数据类型的代码。有关可能的类型代码的列表,请参见注册表值类型。如果不需要类型代码,则lpType参数可以为NULL。
lpData:指向接收该值数据的缓冲区的指针。如果不需要数据,此参数可以为空。
lpcbData:指向⼀个变量的指针,该变量指定lpData参数指向的缓冲区的⼤⼩(以字节为单位)。当函数返回时,该变量包含复制到lpData的数据的⼤⼩。
如果数据具有REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ类型,那么lpcbData也将包含终⽌null字符或字符的⼤⼩。
只有当lpData为空时,lpcbData参数才可以为NULL。
如果lpData参数指定的缓冲区不够⼤,⽆法容纳数据,则函数返回值ERROR_MORE_DATA,并将所需的缓冲区⼤⼩(以字节为单位)存储到lpcbData指向的变量中。在这种情况下,lpValue缓冲区的内容没有定义。
如果lpData是NULL,并且lpcbData是⾮NULL,那么函数将返回ERROR_SUCCESS,并在lpcbData指向的变量中存储数据的⼤⼩(以字节为单位)。这让应⽤程序确定为值的数据分配缓冲区的最佳⽅法。
如果hKey指定HKEY_PERFORMANCE_DATA,⽽lpData缓冲区太⼩,RegQueryValueEx返回ERROR_MORE_DATA,但是lpcbData不返回所需的缓冲区⼤⼩。这是因为性能数据的⼤⼩可以从⼀个调⽤更改为下⼀个调⽤。在这种情况下,您必须增加缓冲区⼤⼩并调⽤RegQueryValueEx,在lpcbData参数中再次传递更新的缓冲区⼤⼩。重复此操作,直到函数成功。您需要维护⼀个单独的变量来跟踪缓冲区⼤⼩,因为lpcbData返回的值是不可预测的。
返回值
如果函数成功,返回值为ERROR_SUCCESS。
如果函数失败,返回值是Winerror.h中定义的⾮零错误代码。您可以使⽤FormatMessage函数和FORMAT_MESSAGE_FROM_SYSTEM标志来获得错误的通⽤描述。
⽰例代码:
#include<stdio.h>
#include<conio.h>
#include<windows.h>
void main(void)
{
long lRet;
HKEY hKey;
TCHAR tchData[64];
DWORD dwSize;
lRet=RegOpenKeyEx(
HKEY_LOCAL_MACHINE,        // handle to open key
"Hardware\\Description\\System\\CentralProcessor\\0",  // subkey name
0,  // reserved
KEY_QUERY_VALUE, // security access mask  &hKey    // handle to open key
);
if(lRet==ERROR_SUCCESS)
{
dwSize=sizeof(tchData);
lRet=RegQueryValueEx(
hKey,            // handle to key
"ProcessorNameString",  // value name
NULL,  // reserved
NULL,      // type buffer
(LPBYTE)tchData,        // data buffer
&dwSize      // size of data buffer
);
if(lRet==ERROR_SUCCESS)
{
printf("\n CPU INFO:");
printf("%s\n",tchData);
}
//以下是失败的内容
else
{
printf("\nCPU INFO:");
printf("UNKNOWN\n");
}
}
//以下是打开失败
else
{
printf("\n CPU INFO:");
printf("UNKNOWN\n");
}
RegCloseKey(hKey);
getch();
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。