68 lines
1.9 KiB
C#
68 lines
1.9 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
using System.Reflection;
|
|
using System.Runtime.CompilerServices;
|
|
using Microsoft.Win32;
|
|
|
|
namespace MassiveKnob.ViewModel.Settings
|
|
{
|
|
public class SettingsStartupViewModel : INotifyPropertyChanged
|
|
{
|
|
public const string RunKey = @"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
|
|
public const string RunValue = @"MassiveKnob";
|
|
|
|
// ReSharper disable UnusedMember.Global - used by WPF Binding
|
|
private bool runAtStartup;
|
|
public bool RunAtStartup
|
|
{
|
|
get => runAtStartup;
|
|
set
|
|
{
|
|
if (value == runAtStartup)
|
|
return;
|
|
|
|
runAtStartup = value;
|
|
OnPropertyChanged();
|
|
|
|
ApplyRunAtStartup();
|
|
}
|
|
}
|
|
// ReSharper restore UnusedMember.Global
|
|
|
|
|
|
public SettingsStartupViewModel()
|
|
{
|
|
var runKey = Registry.CurrentUser.OpenSubKey(RunKey, false);
|
|
runAtStartup = runKey?.GetValue(RunValue) != null;
|
|
}
|
|
|
|
|
|
private void ApplyRunAtStartup()
|
|
{
|
|
var runKey = Registry.CurrentUser.OpenSubKey(RunKey, true);
|
|
Debug.Assert(runKey != null, nameof(runKey) + " != null");
|
|
|
|
if (RunAtStartup)
|
|
{
|
|
var entryAssembly = Assembly.GetEntryAssembly();
|
|
Debug.Assert(entryAssembly != null, nameof(entryAssembly) + " != null");
|
|
|
|
runKey.SetValue(RunValue, new Uri(entryAssembly.CodeBase).LocalPath);
|
|
}
|
|
else
|
|
{
|
|
runKey.DeleteValue(RunValue, false);
|
|
}
|
|
}
|
|
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
|
{
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
}
|
|
}
|