-3

我尝试了很多方法来将值转换为字符串,所以我的工具集的一部分我制作了一个表格,可以告诉你你的 HWID 硬件 ID。我找到了其中包含值的注册表。

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\IDConfigDB\Hardware Profiles\0001"\HwProfileGuid"

-> 这给出了长的测试字符串

我想在一个标签上不和谐我尝试了所有我知道的方法但没有一个工作我最近尝试的一个是

Microsoft.Win32.RegistryKey key3;
key3 = "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\IDConfigDB\Hardware Profiles\0001\HwProfileGuid2";

所以这是我的代码:

string regg = (string)key3.GetValue("");
label2.Text = regg;

我在这里得到了那个代码表

但它给出了一个错误说:

无法将类型“字符串”隐式转换为“Microsoft.Win32.RegistryKey”

我现在到处搜索谷歌,但他们总是在谈论其他事情。无论我如何尝试,它都会出现一些错误。我只想在按钮单击标签时显示 HWID 值。

我正在使用 C# Visual Studio 2017。

我什至试过

try
            {

                label2.Text = Registry.LocalMachine.OpenSubKey("SYSTEM\\ControlSet001\\Control\\IDConfigDB\\Hardware Profiles\\0001\\", true).GetValue("HwProfileGuid");

            }
            catch(Exception ex)
            {

            }

现在说:无法将类型“对象”隐式转换为“字符串”。存在显式转换(您是否缺少演员表?)

4

1 回答 1

0

无法将类型“字符串”隐式转换为“Microsoft.Win32.RegistryKey”

是因为您的 key3 变量被声明为 RegistryKey,并且您试图将字符串放入其中,而不是将其分配给 OpenSubKey 方法的结果。将该字符串放在括号中,删除 HKEY_LOCAL_MACHINE\ 并将“Registry.LocalMachine.OpenSubKey”放在左括号之前。

该 key3 将是一次性的,因此将其放在“使用”块中。

我无法从这里访问 Windows 注册表,但如果 HwProfileGuid 是密钥的名称,那么您的 GetEntry("") 是读取“默认值”的方法,这是正确的。但是,如果 HwProfileGuid 是值的名称,则删除该名称和尾部反斜杠,并将 HwProfileGuid 放在 GetEntry 的引号内。

下一点是值的类型可能不是字符串。(再次......我没有注册表,所以无法检查)如果您将 GetValue 的结果存储在一个对象(而不是字符串)中,那么您可以使用调试器单步执行,它会告诉您类型是什么.

这是读取注册表项的一个很好的例子...... https://stackoverflow.com/a/18234755/5198140

于 2018-03-04T01:48:51.520 回答