我几乎所有的编程都是使用 C# 完成的,对于 C++ 来说还是个新手。但是现在我必须转换为 C++,并且发现它有点困难。例如,我使用 C# 编写了一个非常简单的程序来获取注册表项,然后使用递归函数迭代注册表项以查找特定项,然后获取我想要的值。没问题,我可以使用 C# 在 10 分钟内编写该程序。这是代码。
我的主要职能。它获取蓝牙注册表项,然后调用递归函数。
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.
}
递归函数。迭代传递的 Key 以找出必要的值。
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 控制台 C++ 程序。
我发现我可以执行以下操作来获取蓝牙注册表项。
RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Enum\\Bluetooth", 0, KEY_READ, &hKey)
但在那之后,我对递归函数感到非常困惑。特别是,当我不知道子项名称时,如何获取所传递的注册表项的可用子项?或者简而言之,C++ 中的RegistryKey.GetSubKeyNames() 的等效行为是什么?
因为我才刚刚开始这件事,所以如果有一个带有一些解释的代码示例就太好了。
最佳答案
您可以通过循环调用 RegEnumKeyEx
直到返回 ERROR_NO_MORE_ITEMS
来获取所有子项。
以完全相同的方式,您可以通过循环调用 RegEnumValue
获取所有值,直到返回 ERROR_NO_MORE_ITEMS
。
关于c# - 从 C# 转换为 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6026468/