[英]C++ Read values from the registry
我想显示这些注册表项值:
代码:
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL"),
0,
KEY_READ | KEY_WOW64_64KEY,
&hKey) == ERROR_SUCCESS){
DWORD i, retCode, cchName, buflen;
TCHAR achKey[MAX_KEY_LENGTH]; // buffer for subkey name
DWORD cbName; // size of name string
TCHAR achClass[MAX_PATH] = TEXT(""); // buffer for class name
DWORD cchClassName = MAX_PATH; // size of class string
DWORD cSubKeys = 0; // number of subkeys
DWORD cbMaxSubKey; // longest subkey size
DWORD cchMaxClass; // longest class string
DWORD cValues; // number of values for key
DWORD cchMaxValue; // longest value name
DWORD cbMaxValueData; // longest value data
DWORD cbSecurityDescriptor; // size of security descriptor
FILETIME ftLastWriteTime; // last write time
retCode = RegQueryInfoKey(
hKey, // key handle
achClass, // buffer for class name
&cchClassName, // size of class string
NULL, // reserved
&cSubKeys, // number of subkeys
&cbMaxSubKey, // longest subkey size
&cchMaxClass, // longest class string
&cValues, // number of values for this key
&cchMaxValue, // longest value name
&cbMaxValueData, // longest value data
&cbSecurityDescriptor, // security descriptor
&ftLastWriteTime); // last write time
result = RegGetValue(
hKey, NULL, L"MSSQLSERVER",
RRF_RT_REG_SZ, 0, buf, &bufsz);
if (result != ERROR_SUCCESS) {
printf("Failed read value");
_getch();
return -1;
}
wprintf(L"%s\n", buf);
}
我需要用变量keyName
替换L"MSSQLSERVER"
,但我不明白该怎么做。 我正在尝试将键的名称写入变量。
LPWSTR aResult;
LPSTR keyName;
RegEnumKeyExA(hKey, i, keyName, &cchName, NULL, NULL, NULL, NULL);
MultiByteToWideChar(0, 0, keyName, -1, aResult, 0);
result = RegGetValue(
hKey, NULL, aResult,
RRF_RT_REG_SZ, 0, buf, &bufsz);
但我认为这是错误的。 这里的keyName
是NULL
。 并且keyName
是LPSTR
,但RegGetValue()
需要LPCWSTR
。
事实证明,我的任务需要名称,而不是值。 并且只有 SQL 快递。 这是代码:
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL",
0,
KEY_READ | KEY_WOW64_64KEY,
&hTestKey) == ERROR_SUCCESS
)
while (RegEnumValueW(hTestKey, index, (wchar_t*)valueName.c_str(), &lppchValueName, 0, 0, 0, 0) == ERROR_SUCCESS)
{
lppchValueName = MAX_PATH;
buffSize = MAX_PATH;
if (RegQueryValueExW(hTestKey, valueName.c_str(), 0, 0, (LPBYTE)value.c_str(), &buffSize) == ERROR_SUCCESS)
{
if (value.find(L"Express") != std::wstring::npos || value.find(L"EXPRESS") != std::wstring::npos || value.find(L"express") != std::wstring::npos)
{
// Here is an array entry.
}
}
index++;
memset((void*)valueName.c_str(), 0, MAX_PATH);
memset((void*)value.c_str(), 0, MAX_PATH);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.