|
|
using Microsoft.Win32; using System; using System.IO; using System.Windows.Forms;
namespace Apewer.Internals {
/// <summary>注册表。</summary>
static class RegistryHelper {
/// <summary>用户登录后的启动项。</summary>
const string Run = @"Software\Microsoft\Windows\CurrentVersion\Run";
/// <summary>HKEY_CURRENT_USER</summary>
/// <remarks>当前用户的信息。</remarks>
public static RegistryKey CurrentUser { get => Registry.CurrentUser; }
/// <summary>HKEY_LOCAL_MACHINE</summary>
/// <remarks>系统信息,对所有用户生效,设置需要管理员权限。</remarks>
public static RegistryKey LocalMachine { get => Registry.LocalMachine; }
/// <summary>获取值。</summary>
/// <param name="root">注册表存储区。</param>
/// <param name="key">路径。</param>
/// <param name="name">名称。</param>
/// <returns>值。获取失败时返回 NULL 值。</returns>
public static object Get(RegistryKey root, string key, string name) { try { #if !NET20
using #endif
var rkey = root.OpenSubKey(key, RegistryKeyPermissionCheck.ReadSubTree); var names = rkey.GetValueNames(); if (names.Contains(name)) { var value = rkey.GetValue(name, null); return value; } } catch { } return null; }
/// <summary>获取字符串。</summary>
/// <param name="root">注册表存储区。</param>
/// <param name="key">路径。</param>
/// <param name="name">名称。</param>
/// <returns>字符串的值。获取失败时返回 NULL 值。</returns>
public static string GetString(RegistryKey root, string key, string name) => Get(root, key, name) as string;
/// <summary>设置字符串,指定 value 为 NULL 可删除该值。</summary>
/// <param name="root">注册表存储区。</param>
/// <param name="key">路径。</param>
/// <param name="name">名称。</param>
/// <param name="value">值。</param>
/// <returns>错误信息。设置成功时返回 NULL 值。</returns>
public static string Set(RegistryKey root, string key, string name, string value) { try { #if !NET20
using #endif
var rkey = root.OpenSubKey(key, RegistryKeyPermissionCheck.ReadWriteSubTree); var apps = rkey.GetSubKeyNames(); if (value.IsEmpty()) rkey.DeleteValue(name, true); else rkey.SetValue(name, value, RegistryValueKind.String); return null; } catch (Exception ex) { return ex.Message; } }
/// <summary>设置当前用户的启动项。</summary>
/// <remarks>错误消息。</remarks>
public static void SetRun(string name, string command) { var old = GetString(CurrentUser, Run, name); if (old.IsEmpty()) Set(CurrentUser, Run, name, command); }
/// <summary>取消当前用户的启动项。</summary>
/// <remarks>错误消息。</remarks>
public static void CancelRun(string name) { Set(CurrentUser, Run, name, null); }
/// <summary>已启用自动启动。</summary>
public static bool UserAutoRun { get { var path = Application.ExecutablePath; var name = Path.GetFileNameWithoutExtension(path); var value = GetString(CurrentUser, Run, name); return value == path; } set { var path = Application.ExecutablePath; var name = Path.GetFileNameWithoutExtension(path); Set(CurrentUser, Run, name, value ? path : null); } }
}
}
|