c++ - 无法将char数组写入Windows注册表项

标签 c++ winapi registry

我试图使用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/

相关文章:

Java RMI NotBoundException?

java - 如何使用 Java Runtime.exec() 和 Windows REG 实用程序来读取/更新/删除 HKEY_LOCAL_MACHINE\...\CurrentVersion\Run 中的条目?

c++ - 从以新行结尾的txt文件读取时获取故障位

c++ - Qt 拆分 QString 一次

c++ - 设置 cl.exe 的输出路径

c++ - 多次使用 [x, y, z, ...]-clause 语法,不应该允许 operator[] 接受多个参数吗?

c++ - 鼠标点击 handle

c++ - 如何在 C/C++ 中打印带下划线的文本?

c++ - BitBlt 两个图像在另一个之上

registry - NSIS:什么是注册表?