Skip to content

Commit 2d360d5

Browse files
committed
feat: Implementierung der Autostart-Verwaltung über Registry-Zugriff
1 parent ae713d6 commit 2d360d5

1 file changed

Lines changed: 83 additions & 4 deletions

File tree

file_sorter.py

Lines changed: 83 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from datetime import datetime
66
import subprocess
77
import hashlib
8+
import winreg # NEU: Für den Zugriff auf die Windows Registry
89

910
class 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 ---
542621
if __name__ == "__main__":

0 commit comments

Comments
 (0)