我尝试了很多方法将值转换为String,因此我的工具集的一部分我制作了一个表单,告诉你你的HWID HardWare 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;
我在这里获得了代码表格
但它出错了:
无法将类型'string'隐式转换为'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)
{
}
现在说: 无法将类型'object'隐式转换为'string'。存在显式转换(您是否错过了演员?)
答案 0 :(得分: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