Я выполнил почти все свое программирование с использованием C # и в значительной степени новичок в C ++. Однако сейчас мне нужно перейти на C ++, и мне это немного сложно. Например, я написал довольно простую программу, использующую C # для получения RegistryKey, затем, используя рекурсивную функцию, я перебираю свой ключ реестра, чтобы найти определенный ключ, а затем получаю нужные значения. Нет проблем, я могу написать эту программу за 10 минут, используя C #. Вот код.
Моя основная функция. Он получает ключ реестра Bluetooth и затем вызывает рекурсивную функцию.
private static void CheckOpenComPorts()
{
RegistryKey blueToothPorts = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Enum\Bluetooth");
List<string> foundPorts = new List<string>();
AddFoundPortsToList(blueToothPorts, ref foundPorts);
//Rest of the program; not relevant here.
}
Рекурсивная функция. Итерирует переданный ключ, чтобы найти необходимые значения.
private static void AddFoundPortsToList(RegistryKey regKey, ref List<string> ports)
{
try
{
string[] subKeys = regKey.GetSubKeyNames();
if (subKeys != null)
{
foreach (string subKey in subKeys)
{
AddFoundPortsToList(regKey.OpenSubKey(subKey), ref ports);
}
}
if (regKey.Name.EndsWith("Device Parameters"))
{
string str = System.Convert.ToString(regKey.GetValue("PortName"));
if (String.IsNullOrEmpty(str) == false)
{
ports.Add(str);
}
}
}
catch (System.Security.SecurityException ex)
{
;
}
}
Приведенный выше код работает нормально, но когда я попытался преобразовать его в C ++, я довольно растерялся.
Примечание: я использую Win32 Console C ++ Program.
Я понял, что могу сделать что-то вроде следующего, чтобы получить ключ реестра Bluetooth.
RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Enum\\Bluetooth", 0, KEY_READ, &hKey)
Но после этого я довольно запутался в рекурсивной функции. Специально, как я могу получить доступные подразделы переданного ключа реестра , когда я НЕ знаю имена подразделов ?. Или вкратце, каково эквивалентное поведение RegistryKey.GetSubKeyNames () в C ++?
Поскольку я только начинаю, пример кода с некоторыми пояснениями был бы великолепен.