Writing string (REG_SZ) values to the registry in C++

匿名 (未验证) 提交于 2019-12-03 02:45:02

问题:

I've got most of the code for writing a value to the windows registry, however when I change the path to a dummy key and value that I've set up for testing it fails. My code is below:

    HKEY hKey;     LPCTSTR sk = TEXT("SOFTWARE\TestSoftware");      LONG openRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sk, 0, KEY_ALL_ACCESS , &hKey);      if (openRes==ERROR_SUCCESS) {         printf("Success opening key.");     } else {         printf("Error opening key.");     }      LPCTSTR value = TEXT("TestSoftwareKey");     LPCTSTR data = "TestData\0";      LONG setRes = RegSetValueEx (hKey, value, 0, REG_SZ, (LPBYTE)data, strlen(data)+1);      if (setRes == ERROR_SUCCESS) {         printf("Success writing to Registry.");     } else {         printf("Error writing to Registry.");     }      LONG closeOut = RegCloseKey(hKey);      if (closeOut == ERROR_SUCCESS) {         printf("Success closing key.");     } else {         printf("Error closing key.");     } 

All three tests yield error statuses.

The part that confuses me is that I was able to run this code when pointing it at other portions of the registry. Any ideas?

thanks, brian

回答1:

I feel silly. The solution is that need to properly escape the slash in the string as follows:

LPCTSTR sk = TEXT("SOFTWARE\\TestSoftware"); 

Hopefully someone finds this useful...



回答2:

HKEY OpenKey(HKEY hRootKey, char* strKey) {   HKEY hKey;   LONG nError = RegOpenKeyEx(hRootKey, strKey, NULL, KEY_ALL_ACCESS, &hKey);    if (nError==ERROR_FILE_NOT_FOUND)   {     cout << "Creating registry key: " << strKey << endl;     nError = RegCreateKeyEx(hRootKey, strKey, NULL, NULL,     REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL, &hKey, NULL);   }    if (nError)     cout << "Error: " << nError << " Could not find or create " <<      strKey << endl;    return hKey; }  void SetintVal(HKEY hKey, LPCTSTR lpValue, DWORD data) {   LONG nError = RegSetValueEx(hKey, lpValue, NULL, REG_DWORD,   (LPBYTE)&data, sizeof(DWORD));    if (nError)       cout << "Error: " << nError << " Could not set registry value: " << (char*)lpValue << endl; }  DWORD GetintVal(HKEY hKey, LPCTSTR lpValue) {   DWORD data;   DWORD size = sizeof(data);   DWORD type = REG_DWORD;   LONG nError = RegQueryValueEx(hKey, lpValue, NULL, &type, (LPBYTE)&data, &size);    if (nError==ERROR_FILE_NOT_FOUND)      data = 0;    SetVal() is called.   else if (nError)     cout << "Error: " << nError << " Could not get registry value " << (char*)lpValue << endl;    return data; }  BOOL SetcharVal(HKEY Key,char* subkey,char* StringName,char* Stringdata) {   HKEY hKey = OpenKey(Key,subkey);    LONG openRes = RegOpenKeyEx(Key, subkey, 0, KEY_ALL_ACCESS , &hKey);    if (openRes==ERROR_SUCCESS) {    } else {     printf("Error opening key.");   }    LONG setRes = RegSetValueEx (hKey, StringName, 0, REG_SZ, (LPBYTE)Stringdata, strlen(Stringdata)+1);    if (setRes == ERROR_SUCCESS) {    } else {     printf("Error writing to Registry.");   }    LONG closeOut = RegCloseKey(hKey);    if (closeOut == ERROR_SUCCESS) {    } else {     printf("Error closing key.");   }  }  char* GetCharVal(HKEY Key,char* subkey,char* StringName) {   DWORD dwType = REG_SZ;   HKEY hKey = 0;   char value[1024];   DWORD value_length = 1024;   RegOpenKey(HKEY_LOCAL_MACHINE,subkey,&hKey);   RegQueryValueEx(hKey, StringName, NULL, &dwType, (LPBYTE)&value,     &value_length);   RegCloseKey(hKey);   return value; } 

I am using this code.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!