在我的应用程序中,我使用RegSetKeyValueA将一些激活密钥存储在注册表中。
阻止我的应用与Windows XP向后兼容的唯一瓶颈是RegSetKeyValueA函数。
有什么办法可以解决这个问题?
答案 0 :(得分:2)
可以使用Windows 2000中的RegSetKeyValueW
来轻松实现RegSetValueExW
功能
LSTATUS MyRegSetKeyValueW(
HKEY hKey,
LPCWSTR lpSubKey,
LPCWSTR lpValueName,
DWORD dwType,
LPCVOID lpData,
DWORD cbData
)
{
LSTATUS s;
if (lpSubKey && *lpSubKey)
{
s = RegCreateKeyExW(hKey, lpSubKey, 0, 0, 0, KEY_SET_VALUE, 0, &hKey, 0);
if (s != NOERROR)
{
return s;
}
}
s = RegSetValueExW(hKey, lpValueName, 0, dwType,
static_cast<PBYTE>(const_cast<void*>(lpData)), cbData);
if (lpSubKey && *lpSubKey)
{
RegCloseKey(hKey);
}
return s;
}
,并将自己的代码RegSetKeyValueW
替换为MyRegSetKeyValueW
。可能对 A 版本执行相同的操作,但需要了解 A 版本将字符串参数转换为unicode,然后调用 W 版本。因此始终最好直接调用 W 版本
答案 1 :(得分:1)
您应该使用RegSetValueExA
由于签名非常相似,很容易混淆两者。
支持的最低客户端Windows 2000 Professional [仅桌面应用]
支持的最低客户端Windows Vista [仅桌面应用]
答案 2 :(得分:0)
使用SHSetValueA(shlwapi.lib),它可以一直工作到IE4(Win98,2000 +)。
如果要设置许多值,则应使用RegCreateKeyA
创建密钥,并调用SHSetValueA
将NULL作为子密钥。