怎么使用RegQueryValue?
我编写了如下代码
char szKey[] = "SOFTWARE\\Century";
LPCTSTR szSub = (LPCTSTR)"Tiger";
if (ERROR_SUCCESS == RegCreateKey(HKEY_CURRENT_USER,(LPCTSTR)szKey, &hResult))//open register
{
dwRet = RegQueryValue(hResult, (LPCTSTR)szSub, (LPTSTR)szValue, &nLen);
.......
但是dwRet永远返回87,以及错误的参数类型
请问是什么原因
问题点数:50、回复次数:4Top
1 楼rokia(■大力水手■)回复于 2002-08-02 15:00:04 得分 10
LONG RegOpenKey(
HKEY hKey, // handle to open key
LPCTSTR lpSubKey, // name of subkey to open
PHKEY phkResult // handle to open key!!!!!!!!!!!!!!!!
);
你的參數不對啊,應該有 HKEY 的參數啊。
LONG RegQueryValue(
HKEY hKey, // handle to key to query!!!!!!!!!!!!!!!!!!!
LPCTSTR lpSubKey, // subkey name
LPTSTR lpValue, // string buffer
PLONG lpcbValue // size of returned string
);
第一個參數應該是 keyTop
2 楼rokia(■大力水手■)回复于 2002-08-02 15:00:53 得分 10
一段例子
HKEY keyExt,keyExttype;
TCHAR filetype1[100] ;
TCHAR filetype2[100] ;
DWORD size = sizeof(TCHAR[100]);
DWORD size2=size;
CString strExt1=".";
strExt1+=strExt;
RegOpenKey(HKEY_CLASSES_ROOT, strExt1, &keyExt);
RegQueryValueEx(keyExt, _T(""), 0, 0, (BYTE*)filetype1, &size);
Top
3 楼wistaria(听风听雨)回复于 2002-08-02 15:06:19 得分 20
RegQueryValue
RegQueryValue函数找回给定注册表键的默认值或未命名值所关联的数据。这个数据必须是一个以空字符结束的字符串。
这个函数与Windows 3.1兼容。基于Win32的应用程序应该使用RegQueryValueEx函数。
LONG RegQueryValue( HKEY hKey, // 要查询键的句柄
LPCTSTR lpSubKey, // 要查询子键的名字
LPTSTR lpValue, // 返回字符串的缓存
PLONG lpcbValue // 接收返回字符串的大小);
参数
hKey
当前打开的键或下列已确定保留句柄值:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
Windows NT: HKEY_PERFORMANCE_DATA
Windows 95和Windows 98: HKEY_DYN_DATA
lpSubKey
指向要被找回默认值的hKey参数子键的名字的以空字符结束的字符串。如果这个参数为NULL或指向一个空字符串,那么这个函数找回能被hKey识别的默认值。
lpValue
指向与给定值的默认值相关联的以空字符串结束的字符串的缓存区。
如果lpValue是NULL并且lpcbValue不是NULL,这个函数返回ERROR_SUCCESS,并取回被lpcbData指定的变量缓存的大小(以字节为单位)。这个为值的数据缓存分配最好的途径。
lpcbValue
以字节为单位,指向lpData参数所指定地缓存区大小的变量。函数返回复制到lpData的数据大小的变量(包含结束字符)。
如果被lpData参数指定的缓存不够大,这个函数返回ERROR_MORE_DATA值,并取回被lpcbData指定的变量缓存的大小(以字节为单位)。
在所有的案例中,在lpcbValue返回的值的大小包含字符串的结束符。
返回值
如果调用成功,返回ERROR_SUCCESS。
如果调用失败,返回一个非零错误码(定义在WINERROR.H)。你可以使用带有FORMAT_MESSAGE_FROM_SYSTEM标记的FormatMessage函数获得错误的普通描述信息。
注意
能被hKey参数识别的键必须被带有KEY_QUERY_VALUE存取权限打开(KEY_READ存取权限包括KEY_QUERY_VALUE存取权限)。
如果这个函数的ANSI版本被使用(明确的调用RegQueryValueExA或在包含WINDOWS.H文件前不定义UNICODE),这个函数在复制它到lpValue参数给定的缓存区前,转换存贮的Unicode字符串到ANSI字符串。
Windows NT: 需要3.1或更高版本。
Windows: 需要Windows 95或更高版本。
Windows CE: 不支持。
头文件: winreg.h。
输入库: advapi32.lib。
Unicode: 在Windows NT中作为Unicode和ANSI执行。
Top
4 楼In355Hz(好象一条狗)回复于 2002-08-02 15:07:21 得分 10
Win32下应该用RegQueryValueEx
例子:
static BOOL AfxRegGetString(HKEY hKey, LPCTSTR lpValueName, LPTSTR lpReceive, DWORD cSize)
{
DWORD dwType;
DWORD cbSize = cSize * sizeof(TCHAR);
if (ERROR_SUCCESS == ::RegQueryValueEx(hKey, lpValueName, NULL, &dwType,
(LPBYTE)lpReceive, &cbSize))
{
if (dwType == REG_SZ && cbSize > 0)
return TRUE;
}
return FALSE;
}Top




