Я пытаюсь реализовать что-то, где мне нужно изменить значения в реестре, где то, что я удаляю и что я добавляю, определяется только во время выполнения.мой тестовый код:
CString test_string, change_from, change_to;
test_string.Format(_T("Communications Port (COM1)"));
change_from.Format(_T("COM1"));
change_to.Format(_T("COM2"));
test_string.Replace(change_from, change_to);
MessageBox(test_string, _T("Test"), MB_OK);
работает, как и ожидалось.
, но когда test_string и change_from заполняются из реестра, это не так.
CRegKey serenum_key;
serenum_key.Open(HKEY_LOCAL_MACHINE, _T("System\\CurrentControlSet\\services\\Serenum\\Enum"), KEY_READ);
CRegKey sysenum_key;
sysenum_key.Open(HKEY_LOCAL_MACHINE, _T("System\\CurrentControlSet\\Enum"), KEY_READ);
DWORD count = 0;
serenum_key.QueryDWORDValue(_T("Count"), count);
CString keyname, keypath, friendlyname, portname;
const ULONG max_len = 256;
ULONG len;
keypath.Preallocate(max_len);
friendlyname.Preallocate(max_len);
portname.Preallocate(max_len);
for (DWORD i = 0; i < count; i++) {
keyname.Format(_T("%d"), i);
len = max_len;
serenum_key.QueryStringValue(keyname, keypath.GetBuffer(), &len);
CRegKey dev_key;
dev_key.Open(sysenum_key, keypath.GetBuffer(), KEY_READ);
len = max_len;
dev_key.QueryStringValue(_T("FriendlyName"), friendlyname.GetBuffer(), &len);
CRegKey devparams_key;
devparams_key.Open(dev_key, _T("Device Parameters"), KEY_READ);
len = max_len;
devparams_key.QueryStringValue(_T("PortName"), portname.GetBuffer(), &len);
ATLTRACE(friendlyname);
ATLTRACE(portname);
CString newname;
newname.Format(_T("COM%d"), 50);
ATLTRACE(newname);
friendlyname.Replace(portname, newname);
ATLTRACE(friendlyname);
devparams_key.Close();
dev_key.Close();
}
sysenum_key.Close();
serenum_key.Close();
}
следы I 'я получаю показ того, что я ожидаю увидеть из раздела реестра и нового имени, но понятное имя остается неизменным:
Communications Port (COM1)
COM1
COM50
Communications Port (COM1)
, почему Replace
работает в первом случае, но не с реестромключевые значения?к сведению, я работаю с Visual Studio Community 2017, набор инструментов платформы v141, Unicode, x64