Script for automating a large assortment of AME related actions
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

342 lines
16 KiB

using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Management;
using System.Net.Http;
using System.ServiceProcess;
using System.Threading;
using amecs.Actions;
using Ameliorated.ConsoleUtils;
namespace amecs.Extra
{
public static partial class Extra
{
public static bool ShowMenu()
{
while (true)
{
Program.Frame.Clear();
bool hibernation = new Reg.Value()
{
KeyName = @"HKLM\SYSTEM\CurrentControlSet\Control\Power",
ValueName = "HibernateEnabled",
Data = 1,
}.IsEqual()
&&
new Reg.Value()
{
KeyName = @"HKLM\SYSTEM\CurrentControlSet\Control\Power",
ValueName = "HiberFileType",
Data = 2,
}.IsEqual();
bool notifications = new Reg.Value()
{
KeyName = "HKU\\" + Globals.UserSID + @"\SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications",
ValueName = "ToastEnabled",
Data = 1,
}.IsEqual();
bool notificationCenter = !new Reg.Value()
{
KeyName = "HKU\\" + Globals.UserSID + @"\SOFTWARE\Policies\Microsoft\Windows\Explorer",
ValueName = "DisableNotificationCenter",
Data = 1,
}.IsEqual();
bool vbsEnabled = new Reg.Value()
{
KeyName = @"HKCR\.vbs",
ValueName = "",
Data = "VBSFile",
Type = Reg.RegistryValueType.REG_SZ
}.IsEqual();
bool ncsiEnabled = new Reg.Value()
{
KeyName = @"HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet",
ValueName = "EnableActiveProbing",
Data = 1,
}.IsEqual();
var mainMenu = new Ameliorated.ConsoleUtils.Menu()
{
Choices =
{
new Menu.MenuItem("Manage WSL", null) {IsEnabled = false, SecondaryText = "[Not Supported]", PrimaryTextForeground = ConsoleColor.DarkGray, SecondaryTextForeground = ConsoleColor.Red},
hibernation ?
new Menu.MenuItem("Disable Hibernation", new Func<bool>(DisableHibernation)) :
new Menu.MenuItem("Enable Hibernation", new Func<bool>(EnableHibernation)),
notificationCenter ?
new Menu.MenuItem("Disable Notification Center", new Func<bool>(DisableNotifCen)) :
new Menu.MenuItem("Enable Notification Center", new Func<bool>(EnableNotifCen)),
notifications ?
new Menu.MenuItem("Disable Desktop Notifications", new Func<bool>(DisableNotifications)) :
new Menu.MenuItem("Enable Desktop Notifications", new Func<bool>(EnableNotifications)),
GetWSHItem(),
vbsEnabled ?
new Menu.MenuItem("Disable Visual Basic Script [VBS] (Legacy)", new Func<bool>(DisableVBS)) :
new Menu.MenuItem("Enable Visual Basic Script [VBS] (Legacy)", new Func<bool>(EnableVBS)),
ncsiEnabled ?
new Menu.MenuItem("Disable NCSI Active Probing (Legacy)", new Func<bool>(DisableNCSI)) :
new Menu.MenuItem("Enable NCSI Active Probing (Legacy)", new Func<bool>(EnableNCSI)),
GetNVCPItem(),
Menu.MenuItem.Blank,
new Menu.MenuItem("Return to Menu", null),
new Menu.MenuItem("Exit", new Func<bool>(Globals.Exit))
},
SelectionForeground = ConsoleColor.Green
};
Func<bool> result;
try
{
mainMenu.Write();
var res = mainMenu.Load();
if (res == null)
return true;
result = (Func<bool>)res;
} catch (Exception e)
{
Console.WriteLine(e);
Console.ReadLine();
return false;
}
try
{
result.Invoke();
} catch (Exception e)
{
ConsoleTUI.ShowErrorBox("Error while running an action: " + e.ToString(), null);
}
}
}
private static Menu.MenuItem GetNVCPItem()
{
if (File.Exists(Environment.ExpandEnvironmentVariables(@"%PROGRAMFILES%\NVIDIA Control Panel\nvcplui.exe")))
return new Menu.MenuItem("Uninstall NVIDIA Control Panel", new Func<bool>(NVCP.Uninstall));
if (Globals.WinVer > 19043)
return new Menu.MenuItem("Install NVIDIA Control Panel", null) {IsEnabled = false, PrimaryTextForeground = ConsoleColor.DarkGray, SecondaryTextForeground = ConsoleColor.Red, SecondaryText = "[Not Supported]"};
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("SELECT NAME FROM Win32_VideoController");
bool foundGPU = false;
foreach (ManagementObject mo in searcher.Get())
{
PropertyData Name = mo.Properties["Name"];
if (Name.Value != null)
{
var name = ((string)Name.Value);
if (name.Contains("NVIDIA") || name.Contains("GeForce") || name.Contains("GTX") || name.Contains("RTX"))
{
foundGPU = true;
break;
}
}
}
if (!foundGPU)
{
return new Menu.MenuItem("Install NVIDIA Control Panel", null) {IsEnabled = false, PrimaryTextForeground = ConsoleColor.DarkGray, SecondaryTextForeground = ConsoleColor.Red, SecondaryText = "[No NVIDIA GPU]"};
}
} catch {}
try
{
if (!ServiceController.GetServices().Any(x => x.ServiceName.Equals("NVDisplay.ContainerLocalSystem")))
return new Menu.MenuItem("Install NVIDIA Control Panel", null) {IsEnabled = false, PrimaryTextForeground = ConsoleColor.DarkGray, SecondaryTextForeground = ConsoleColor.Red, SecondaryText = "[No NVIDIA Driver]"};
} catch { }
try
{
var dir = Directory.EnumerateDirectories(Environment.ExpandEnvironmentVariables(@"%PROGRAMFILES%\WindowsApps")).First(x => x.Contains("NVIDIACorp.NVIDIAControlPanel"));
if (File.Exists(Path.Combine(dir, "nvcplui.exe")))
return new Menu.MenuItem("Install NVIDIA Control Panel", new Func<bool>(() => NVCP.Install(dir)));
} catch { }
if (!amecs.IsInternetAvailable())
return new Menu.MenuItem("Install NVIDIA Control Panel", null) {IsEnabled = false, PrimaryTextForeground = ConsoleColor.DarkGray, SecondaryTextForeground = ConsoleColor.Red, SecondaryText = "[Internet Required]"};
if (!amecs.InternetCheckConnection("https://store.rg-adguard.net", 1, 0))
return new Menu.MenuItem("Install NVIDIA Control Panel", null) {IsEnabled = false, PrimaryTextForeground = ConsoleColor.DarkGray, SecondaryTextForeground = ConsoleColor.Red, SecondaryText = "[Server Unavailable]"};
if (!amecs.InternetCheckConnection("https://git.ameliorated.info/", 1, 0))
return new Menu.MenuItem("Install NVIDIA Control Panel", null) {IsEnabled = false, PrimaryTextForeground = ConsoleColor.DarkGray, SecondaryTextForeground = ConsoleColor.Red, SecondaryText = "[Git Unavailable]"};
try
{
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = client.GetAsync("https://store.rg-adguard.net/").Result)
{
using (HttpContent content = response.Content)
{
string result = content.ReadAsStringAsync().Result;
if (result.Contains("Cloudflare Ray ID"))
return new Menu.MenuItem("Install NVIDIA Control Panel", null) {IsEnabled = false, PrimaryTextForeground = ConsoleColor.DarkGray, SecondaryTextForeground = ConsoleColor.Red, SecondaryText = "[Server Unavailable]"};
}
}
}
} catch { }
return new Menu.MenuItem("Install NVIDIA Control Panel", new Func<bool>(NVCP.InstallFromNetwork));
}
private static Menu.MenuItem GetWSHItem()
{
if (new Reg.Value()
{
KeyName = Globals.UserHive + @"\SOFTWARE\Microsoft\Windows Script Host\Settings",
ValueName = "Enabled",
Data = 1,
}.IsEqual())
return new Menu.MenuItem("Disable Windows Script Host [WSH] (Legacy)", new Func<bool>(WSH.Disable));
if (new Reg.Value()
{
KeyName = Globals.UserHive + @"\SOFTWARE\Microsoft\Windows Script Host\Settings",
ValueName = "Enabled",
Data = 0,
}.IsEqual())
return new Menu.MenuItem("Enable Windows Script Host [WSH] (Legacy)", new Func<bool>(WSH.Enable));
return new Reg.Value()
{
KeyName = @"HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings",
ValueName = "Enabled",
Data = 0,
}.IsEqual() ? new Menu.MenuItem("Disable Windows Script Host [WSH] (Legacy)", new Func<bool>(WSH.Enable)) : new Menu.MenuItem("Disable Windows Script Host [WSH] (Legacy)", new Func<bool>(WSH.Disable));
}
private static bool EnableHibernation() =>amecs.RunBasicAction("Enabling hibernation","Enabled hibernation successfully",() =>
{
Thread.Sleep(1600);
Process proc = new Process();
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "powercfg.exe";
proc.StartInfo.Arguments = "/HIBERNATE /TYPE FULL";
proc.Start();
proc.WaitForExit(20000);
if (proc.ExitCode != 0)
throw new Exception("powercfg exited with a non-zero exitcode.\r\nHibernation may not be supported by your hardware.");
});
private static bool DisableHibernation() =>amecs.RunBasicAction("Disabling hibernation","Disabled hibernation successfully",() =>
{
Thread.Sleep(1600);
Process proc = new Process();
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "powercfg.exe";
proc.StartInfo.Arguments = "/HIBERNATE OFF";
proc.Start();
proc.WaitForExit(20000);
if (proc.ExitCode != 0)
throw new Exception("powercfg exited with a non-zero exitcode.");
Thread.Sleep(1600);
});
private static bool EnableNotifCen() =>amecs.RunBasicAction("Enabling Notification Center","Notification Center enabled successfully",() =>
{
new Reg.Value()
{
KeyName = "HKU\\" + Globals.UserSID + @"\SOFTWARE\Policies\Microsoft\Windows\Explorer",
ValueName = "DisableNotificationCenter",
Operation = Reg.RegistryValueOperation.Delete
}.Apply();
Thread.Sleep(1600);
}, true);
private static bool DisableNotifCen() =>amecs.RunBasicAction("Disabling Notification Center","Notification Center disabled successfully",() =>
{
new Reg.Value()
{
KeyName = "HKU\\" + Globals.UserSID + @"\SOFTWARE\Policies\Microsoft\Windows\Explorer",
ValueName = "DisableNotificationCenter",
Data = 1,
}.Apply();
Thread.Sleep(1600);
}, true);
private static bool EnableNotifications() =>amecs.RunBasicAction("Enabling desktop notifications","Enabled desktop notifications successfully",() =>
{
new Reg.Value()
{
KeyName = "HKU\\" + Globals.UserSID + @"\SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications",
ValueName = "ToastEnabled",
Data = 1,
}.Apply();
Thread.Sleep(1600);
}, true);
private static bool DisableNotifications() =>amecs.RunBasicAction("Disabling desktop notifications","Disabled desktop notifications successfully",() =>
{
new Reg.Value()
{
KeyName = "HKU\\" + Globals.UserSID + @"\SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications",
ValueName = "ToastEnabled",
Data = 0,
}.Apply();
Thread.Sleep(1600);
}, true);
private static bool EnableVBS() =>amecs.RunBasicAction("Enabling Visual Basic Script","Enabled VBS successfully",() =>
{
new Reg.Value()
{
KeyName = @"HKCR\.vbs",
ValueName = "",
Data = "VBSFile",
Type = Reg.RegistryValueType.REG_SZ
}.Apply();
Thread.Sleep(1600);
});
private static bool DisableVBS() =>amecs.RunBasicAction("Disabling Visual Basic Script","Disabled VBS successfully",() =>
{
new Reg.Value()
{
KeyName = @"HKCR\.vbs",
ValueName = "",
Data = "",
Type = Reg.RegistryValueType.REG_SZ
}.Apply();
Thread.Sleep(1600);
});
private static bool EnableNCSI() =>amecs.RunBasicAction("Enabling NCSI Active Probing","Enabled NCSI Active Probing successfully",() =>
{
new Reg.Value()
{
KeyName = @"HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet",
ValueName = "EnableActiveProbing",
Data = 1,
}.Apply();
Thread.Sleep(1600);
}, false, true);
private static bool DisableNCSI() =>amecs.RunBasicAction("Disabling NCSI Active Probing","Disabled NCSI Active Probing successfully",() =>
{
new Reg.Value()
{
KeyName = @"HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet",
ValueName = "EnableActiveProbing",
Data = 0,
}.Apply();
Thread.Sleep(1600);
}, false, true);
}
}