55from datetime import datetime
66import subprocess
77import hashlib
8+ import winreg # NEU: Für den Zugriff auf die Windows Registry
89
910class FileSorterApp :
1011 def __init__ (self , master ):
@@ -17,7 +18,7 @@ def __init__(self, master):
1718 self .sort_by_date = tk .BooleanVar (value = False )
1819 self .date_granularity = tk .StringVar (value = "Year" )
1920
20- # Variablen für GUI-Elemente
21+ # Variablen für GUI-Elemente (werden in setup_widgets initialisiert)
2122 self .cleanup_result_label = None
2223 self .status_label = None
2324 self .progress_bar = None
@@ -151,7 +152,7 @@ def setup_system_tab(self, tab):
151152 command = self .start_duplicate_search ,
152153 bg = "#FFC300" ).pack (anchor = "w" , pady = (5 , 0 ))
153154
154- # --- 4. Ungültige Verknüpfungen (NEU) ---
155+ # --- 4. Ungültige Verknüpfungen ---
155156 shortcut_frame = tk .LabelFrame (tab , text = "🔗 Ungültige Verknüpfungen finden" , padx = 10 , pady = 10 )
156157 shortcut_frame .pack (padx = 10 , fill = "x" , pady = (10 , 0 ))
157158
@@ -163,6 +164,19 @@ def setup_system_tab(self, tab):
163164 text = "▶️ Suche starten & bereinigen" ,
164165 command = self .find_invalid_shortcuts ,
165166 bg = "#FF8C00" , fg = "white" ).pack (anchor = "w" , pady = (5 , 0 ))
167+
168+ # --- 5. Autostart-Verwaltung (NEU) ---
169+ autostart_frame = tk .LabelFrame (tab , text = "⏱️ Autostart-Programme" , padx = 10 , pady = 10 )
170+ autostart_frame .pack (padx = 10 , fill = "x" , pady = (10 , 0 ))
171+
172+ tk .Label (autostart_frame ,
173+ text = "Listet Programme auf, die beim Start geladen werden, und öffnet den Task Manager zur Deaktivierung." ,
174+ justify = tk .LEFT ).pack (anchor = "w" , pady = (0 , 5 ))
175+
176+ tk .Button (autostart_frame ,
177+ text = "▶️ Autostart prüfen & verwalten" ,
178+ command = self .manage_autostart ,
179+ bg = "#FF3333" , fg = "white" ).pack (anchor = "w" , pady = (5 , 0 ))
166180
167181
168182 # --- Methoden für die Dateisortierung (Core) ---
@@ -492,7 +506,6 @@ def find_invalid_shortcuts(self):
492506 if file .lower ().endswith ('.lnk' ):
493507 filepath = os .path .join (root , file )
494508
495- # PowerShell-Befehl, um den Zielpfad der Verknüpfung zu erhalten und zu prüfen
496509 powershell_command = (
497510 f"powershell -ExecutionPolicy Bypass -Command \" $link = Get-Item -LiteralPath '{ filepath } ' -ErrorAction SilentlyContinue; "
498511 f"if ($link.Target -eq $null) {{ Write-Host 'INVALID' }} else {{ Write-Host 'VALID' }}\" "
@@ -526,7 +539,6 @@ def find_invalid_shortcuts(self):
526539
527540 messagebox .showinfo ("Ungültige Verknüpfungen" , message )
528541
529- # Option zum Löschen anbieten
530542 if messagebox .askyesno ("Löschen bestätigen" , f"Sollen { len (invalid_shortcuts )} ungültige Verknüpfungen jetzt gelöscht werden?" ):
531543 deleted_count = 0
532544 for shortcut in invalid_shortcuts :
@@ -537,6 +549,73 @@ def find_invalid_shortcuts(self):
537549 continue
538550 messagebox .showinfo ("Löschung abgeschlossen" , f"Es wurden { deleted_count } ungültige Verknüpfungen gelöscht." )
539551
552+ # --- NEUE FUNKTION: Autostart-Verwaltung ---
553+
554+ def get_autostart_entries (self ):
555+ """Liest Autostart-Einträge aus HKLM und HKCU."""
556+ entries = []
557+
558+ # 1. Benutzer-spezifische Einträge (HKEY_CURRENT_USER)
559+ try :
560+ reg_key = winreg .OpenKey (winreg .HKEY_CURRENT_USER ,
561+ r"Software\Microsoft\Windows\CurrentVersion\Run" ,
562+ 0 , winreg .KEY_READ )
563+ i = 0
564+ while True :
565+ try :
566+ name , value , type = winreg .EnumValue (reg_key , i )
567+ entries .append ({'name' : name , 'path' : value , 'key' : 'HKCU' })
568+ i += 1
569+ except OSError :
570+ break # Ende der Liste
571+ winreg .CloseKey (reg_key )
572+ except Exception :
573+ pass
574+
575+ # 2. Systemweite Einträge (HKEY_LOCAL_MACHINE)
576+ try :
577+ reg_key = winreg .OpenKey (winreg .HKEY_LOCAL_MACHINE ,
578+ r"Software\Microsoft\Windows\CurrentVersion\Run" ,
579+ 0 , winreg .KEY_READ )
580+ i = 0
581+ while True :
582+ try :
583+ name , value , type = winreg .EnumValue (reg_key , i )
584+ entries .append ({'name' : name , 'path' : value , 'key' : 'HKLM' })
585+ i += 1
586+ except OSError :
587+ break
588+ winreg .CloseKey (reg_key )
589+ except Exception :
590+ pass
591+
592+ return entries
593+
594+ def manage_autostart (self ):
595+ """Öffnet ein neues Fenster zur Verwaltung der Autostart-Programme."""
596+ autostart_entries = self .get_autostart_entries ()
597+
598+ if not autostart_entries :
599+ messagebox .showinfo ("Autostart" , "Keine konfigurierbaren Autostart-Einträge in der Registry gefunden." )
600+ return
601+
602+ # Zeige die Einträge in einer Meldung an
603+ entry_list = "\n " .join ([f"[{ e ['key' ]} ] { e ['name' ]} " for e in autostart_entries [:10 ]]) # Zeige nur die ersten 10
604+
605+ message = f"Gefundene Autostart-Einträge ({ len (autostart_entries )} insgesamt):\n \n "
606+ message += entry_list
607+ if len (autostart_entries ) > 10 :
608+ message += f"\n ... und { len (autostart_entries ) - 10 } weitere."
609+
610+ messagebox .showinfo ("Autostart-Einträge" , message )
611+
612+ # Biete an, den Task Manager zu öffnen
613+ if not messagebox .askyesno ("Autostart verwalten" , "Möchtest du nun die Windows-Einstellungen (Task Manager) öffnen, um die Programme manuell zu deaktivieren?" ):
614+ return
615+
616+ # Öffne Task Manager > Autostart (Funktioniert ab Win 8)
617+ subprocess .run (["taskmgr" , "/0 /startup" ], check = False )
618+
540619
541620# --- App starten ---
542621if __name__ == "__main__" :
0 commit comments