Не удается записать массив символов в Windows ключ реестра - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь записать в реестр Windows с помощью Win32 API, но по какой-то причине, когда я пытаюсь записать байты в ключ реестра с типом данных 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 в массив символов b.

При вызове RegOpenKeyEx() успешно. И при вызове RegSetValueEx() это удается. Но значение в реестре не меняется.

Итак, я не уверен, что делать на этом этапе. Я также запускаю приложение как администратор.

1 Ответ

0 голосов
/ 04 августа 2020

Благодаря @Alan Birtles

Мне пришлось компилировать в режиме x64 вместо x86.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...