Я пытаюсь записать в реестр 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()
это удается. Но значение в реестре не меняется.
Итак, я не уверен, что делать на этом этапе. Я также запускаю приложение как администратор.