WindowsBloatwareRemover/WindowsBloatwareRemovalTool.py
2022-07-27 19:49:11 +02:00

143 lines
No EOL
7 KiB
Python

VERSION = "0.1.2"
import os
import ctypes
from sys import exit as sysexit
import sys
import acceptdestruction, adminprompt, done, mainwindow, process
from PyQt5 import QtGui
def isAdmin():
try:
if ctypes.windll.shell32.IsUserAnAdmin():
return True
else:
return False
except:
return False
modeOptions = ["1", "2", "3", "4", "5", "6", "q"]
modeOptionsDisplay = str(modeOptions).replace("'", "").replace(",", "/").replace(" ", "")
requireAdmin = ["1", "2", "3", "4", "5", "6"]
requireAdminDisplay = str(requireAdmin).replace("'", "").replace(",", "/").replace(" ", "")
apps = ["3D Builder", "Alarms", "Calculator", "Communications", "Camera", "Cortana", "Get Office", "Skype", "Get Started", "Groove Music", "Maps", "News", "One Note", "People", "Solitaire Collection", "Finance", "Video & TV", "Photos", "Microsoft Store", "Sports", "Voice Recorder", "Weather", "Xbox", "Xbox Gaming Overlay", "Get Help", "Your Phone", "Cortana", "Edge"]
appsIDs = ["3d", "windowsalarms", "windowscalculator", "windowscommunicationsapps", "windowscamera", "officehub", "skypeapp", "getstarted", "zunemusic", "windowsmaps", "bingnews", "onenote", "people", "solitairecollection", "bingfinance", "zunevideo", "zunemusic", "photos", "windowsstore", "bingsports", "soundrecorder", "bingweather", "xboxapp", "Microsoft.XboxGamingOverlay", "Microsoft.GetHelp", "YourPhone", "Microsoft.549981C3F5F10", None]
removeApp = [True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]
appsBing = ["Finance", "News", "Sports", "Weather"]
appsBingIDs = ["bingfinance", "bingnews", "bingsports", "bingweather"]
appsXbox = ["Xbox", "Xbox Gaming Overlay"]
appsXboxIDs = ["xboxapp", "Microsoft.XboxGamingOverlay"]
appsUsual = ["3D Builder", "Alarms", "Communications", "Camera", "Cortana", "Get Office", "Skype", "Get Started", "Groove Music", "Maps", "News", "One Note", "People", "Solitaire Collection", "Finance", "Sports", "Voice Recorder", "Weather", "Xbox", "Get Help", "Your Phone", "Cortana", "Edge"]
appsUsualIDs = ["3d", "windowsalarms", "windowscommunicationsapps", "windowscamera", "officehub", "skypeapp", "getstarted", "zunemusic", "windowsmaps", "bingnews", "onenote", "people", "solitairecollection", "bingfinance", "bingsports", "soundrecorder", "bingweather", "xboxapp", "Microsoft.GetHelp", "YourPhone", "Microsoft.549981C3F5F10", None]
# if not isAdmin():
# adminprompt.show()
mainwindow.show()
mode = input("Select " + modeOptionsDisplay + ":")
def execPowershell(cmd):
cmd = "powershell -command \"" + cmd + "\""
os.system(cmd)
# define Edge removal as separate function as it requires special Steps
def rmEdge():
# Required Steps to permanently remove edge:
# - Run the edge setup executable with flags to remove it from the system
# - create a ew Registry Key including an entry for windows to not reinstall edge after a new update (because beleive it or not, windows has it as a built-in feature to reinstall Edge after updates if it detects that the user has removed it)
edgeFolders = [ f.path for f in os.scandir("C:/Program Files (x86)/Microsoft/Edge/Application/") if f.is_dir() ]
for i in range(len(edgeFolders)):
if not "." in edgeFolders[i - 1]:
edgeFolders.pop(i - 1)
if len(edgeFolders) == 1:
command = edgeFolders[0] + "/Installer/setup --uninstall --force-uninstall --system-level"
else:
print("\n USER INPUT REQUIRED\n")
for i in range(len(edgeFolders)):
print("\t" + str(i) + ") " + edgeFolders[i - 1].replace("C:/Program Files (x86)/Microsoft/Edge/Application/", ""))
dirIndex = input("Type the number (eg. '1)') of the folder that is similar to '101.0.1210.53': ")
while not dirIndex <= str(len(edgeFolders) - 1):
print("WRONG NUMBER")
dirIndex = input("Type the number (eg. '1)') of the folder that is similar to '101.0.1210.53': ")
#execPowershell("ls 'C:\Program Files (x86)\Microsoft\Edge\Application'")
command = edgeFolders[int(dirIndex) - 1] + "/Installer/setup --uninstall --force-uninstall --system-level"
print(command)
execPowershell(command)
# prevent Edge from reinstalling after updates by creating a registry key
# create new registry key
execPowershell("New-Item -Path 'HKLM:\SOFTWARE\Microsoft' -Name EdgeUpdate")
# create entry within the newly created key
execPowershell("New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\EdgeUpdate' -Name 'DoNotUpdateToEdgeWithChromium' -Value '1' -PropertyType 'DWORD' -Force")
def rmApp(id, name):
if name == "Edge":
# remove edge
rmEdge()
else:
command = "Get-AppxPackage *" + id + "* | Remove-AppxPackage"
execPowershell(command)
print("Removed " + name)
def rmList(list, listNames, removeApp):
for i in range(len(list)):
if removeApp[i-1]:
rmApp(list[i-1], listNames[i-1])
# if no valid mode selected
while mode not in modeOptions:
print("'" + mode + "' IS INVALID.")
mode = input("PLEASE SELECT ONE OF THE FOLLOWING: " + modeOptionsDisplay + ":")
# run the selected mode
if mode == "q":
print("Quitting.")
sysexit()
else:
agreeToDistruction = None
print("\nBy using this program, any possible damage to your Windows Installation is Your Responsability and NOT this scripts Author's.")
while agreeToDistruction != 'y' and agreeToDistruction != 'n':
agreeToDistruction = input("\nBy typing 'y' (lowercase y) for yes You agree to the above point. By typing anything else, the program will abort. [y/n]: ")
if agreeToDistruction == "n":
print("Aborting due to decline...")
sysexit()
sysexit()
else:
if mode == "1":
print("Removing all Unremovable Apps")
rmList(appsIDs, apps, removeApp)
elif mode == "2":
print("Removing all Bing related Apps")
rmList(appsBingIDs, appsBing, removeApp)
elif mode == "3":
print("Removing all XboX related Apps")
rmList(appsXboxIDs, appsXbox, removeApp)
elif mode == "4":
print("Removing all Apps that are usually removed")
rmList(appsUsualIDs, appsUsual, removeApp)
elif mode == "5":
print("Removing the Microsoft Edge Browser")
rmEdge()
elif mode == "6":
print("Removing a custom Selection of Apps")
print("Answer the following by typing a lowercase 'n' for NO or a lowercase 'y' for YES and hit enter\n")
for i in range(len(apps)):
yesno = input("\tRemove " + apps[i-1] + "?")
while yesno != "y" and yesno != "n":
print("\nPlease enter 'y' for yes and 'n' for no.")
yesno = input("\tRemove " + apps[i-1] + "?")
if yesno == "n":
removeApp[i-1] = False
print("Starting to remove apps...")
rmList(appsIDs, apps, removeApp)
else:
print("Whoops. Something went wrong. This case should be programatically impossible but I might just have done some fucky wucky mistake that allows this case to be legal. We could also just blame it all on python. In reality I am just writing a short error message that has suddenly become very long and I just keep writing and no one will ever see this anyway...")
sysexit()
print("All done!")