我试图使用Win32 API写入Windows注册表,但是由于某些原因,当我尝试将字节写入REG_BINARY
数据类型的注册表项时,键值保持不变。
这是尝试写入注册表项的代码:
struct angles
{
float pitch;
float yaw;
float roll;
};
int main()
{
angles ang;
ang.pitch = 69.25;
ang.yaw = 420.21;
ang.roll = 100.0;
unsigned char b[sizeof(ang)];
std::cout << "Size of structure: " << sizeof(ang) << "\n\n";
memcpy(b, &ang, sizeof(ang));
for (int i = 0; i < sizeof(b); i++)
{
printf("Byte %d == %02X ", i, b[i]);
std::cout << "\n\n";
}
HKEY handle;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE, &handle) == ERROR_SUCCESS)
{
if (RegSetValueEx(handle, L"test", 0, REG_BINARY, (BYTE*)&b, sizeof(b)) == ERROR_SUCCESS)
{
std::cout << "Wrote to key test.\n\n";
}
else
{
std::cout << "Couldnt write key\n";
}
}
else
std::cout << "couldn't open key\n";
while (!GetAsyncKeyState(VK_NUMPAD0))
{
}
return 0;
}
如果编译代码,您将看到我将angles结构的字节复制到char数组b
中。调用
RegOpenKeyEx()
时,它成功。并且在调用RegSetValueEx()
时成功。但是,注册表中的值不会更改。因此,我目前不确定该怎么办。我也以管理员身份运行该应用程序。
最佳答案
感谢@Alan Birtles
我必须以x64模式而不是x86进行编译。
关于c++ - 无法将char数组写入Windows注册表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63254655/