.net 如何在C#中打开注册表?

vsdwdz23  于 2023-05-02  发布在  .NET
关注(0)|答案(3)|浏览(210)

我有这个代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Registry.CurrentUser.OpenSubKey(@"HKEY_CURRENT_USER\software\google");
    }
}

form1只有一个按钮。
我想通过单击按钮打开HKEY_CURRENT_USER\software\google\
但是按钮在点击后什么也不做,为什么?

nbysray5

nbysray51#

你的代码打开一个对象并返回它。如果你把这个对象赋值给一个像这样的变量:
var key = Registry.CurrentUser.OpenSubKey(@"HKEY_CURRENT_USER\software\google");
你可以在赋值后修改它。
如果你想打开regedit工具,你应该使用以下代码:
Process.Start("regedit.exe")

pftdvrlh

pftdvrlh2#

在编程中,一般有两种类型的函数:
有副作用的函数实际上的事情,没有副作用的函数返回的东西。
在本例中,OpenSubKey返回RegistryKey。你必须对它做点什么,否则你的按钮按下没有效果。
原因是,你的函数调用没有副作用。

pengsaosao

pengsaosao3#

你的代码有两个问题:
1.即使你对从函数中获取的值做了一些事情,它也不会工作,原因很简单:
当您这样做时:
Registry.CurrentUser.OpenSubKey(@"HKEY_CURRENT_USER\software\google");
您正在打开当前用户项的子项,并且正在当前用户中搜索另一个当前用户;这意味着你实际上正在寻找:
HKEY_CURRENT_USER\HKEY_CURRENT_USER\software\google
你需要做的是搜索:@"software\google"
例如:

MessageBox.Show(Registry.CurrentUser.OpenSubKey(@"software\google").ToString());

1.你误解了“开放”的含义;打开并不意味着它将打开注册表编辑器窗口,它只是意味着在后台,您的应用将打开该键以供进一步使用。
如果我理解正确的话,你希望注册表编辑器窗口打开,并自动导航到Google键。
为此,您可以使用以下技巧:
将regedit的LastKey键设置为Google路径,然后一旦打开regedit,它就会自动导航到那里:

RegistryKey myKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Applets\Regedit", true);
if (myKey != null)
{
    myKey.SetValue("LastKey", @"HKEY_CURRENT_USER\software\google", RegistryValueKind.String);
    myKey.Close();
}
System.Diagnostics.Process.Start("regedit.exe");

相关问题