c# - 从 C# 转换为 C++

标签 c# visual-c++ registry

我几乎所有的编程都是使用 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/

相关文章:

c# - c# 索引中的二维数组使用 lambda 表达式搜索数组

c# - 是否可以将 SSRS 报告导出到 Excel,报告的图表是 Excel 图表而不是图像?

c# - 如何从代码中清除应用程序的 CommandLineArgs?

c++ - 错误 C2059 : syntax error 'constant'

registry - HKEY_LOCAL_MACHINE\SOFTWARE\Classes 与 HKEY_CLASSES_ROOT

registry - 使用 regsvr32.exe 注册 OCX 并使其可供所有用户使用

c# - 注册表和注册表配置单元有什么区别

c# - 限制服务总线消息接收的 Azure Functions 速率

visual-studio - 如何为 Visual C++ 2013 项目使用外部构建系统?

c++ - OpenCV错误使用逆