Unterstützung für Administratorrechte hinzugefügt

This commit is contained in:
Akamaru 2025-04-30 20:43:46 +02:00
parent 1bd34ec5bf
commit edf0012917
2 changed files with 55 additions and 10 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
data.json
Programm-Shortcut.7z

60
run.py
View File

@ -456,7 +456,7 @@ class ProgramLauncher:
info_frame.grid(row=4, column=0, columnspan=2, sticky="ew", pady=5)
# Version
version_label = ttk.Label(info_frame, text="Version: 1.0", font=("Segoe UI", 9))
version_label = ttk.Label(info_frame, text="Version: 1.1", font=("Segoe UI", 9))
version_label.pack(anchor="w")
# Copyright & Autor Info
@ -705,17 +705,41 @@ class ProgramLauncher:
return
item_id = selected_items[0]
program_values = self.program_tree.item(item_id, "values")
program_name = program_values[0].strip() # Leerzeichen am Anfang entfernen
program_path = self.program_tree.item(item_id, "tags")[0]
# Prüfen, ob das Programm Adminrechte benötigt
requires_admin = False
for program in self.programs:
if program["Name"].strip() == program_name.strip():
requires_admin = program.get("Adminrechte", False)
break
try:
subprocess.Popen(program_path)
if sys.platform == "win32" and requires_admin:
try:
# Direkter Aufruf über ShellExecute API mit erhöhten Rechten
import ctypes
# Der Parameter "runas" fordert erhöhte Rechte an
result = ctypes.windll.shell32.ShellExecuteW(None, "runas", program_path, None, None, 1)
# Wenn der Rückgabewert <= 32 ist, gab es einen Fehler
if result <= 32:
# Fallback: Starte normal ohne erhöhte Rechte
subprocess.Popen(program_path)
except Exception:
# Wenn es fehlschlägt, starte normal
subprocess.Popen(program_path)
else:
# Normaler Start ohne Adminrechte
subprocess.Popen(program_path)
except Exception as e:
messagebox.showerror("Fehler", f"Fehler beim Starten des Programms: {str(e)}")
def add_program(self):
add_window = tk.Toplevel(self.root)
add_window.title("Programm hinzufügen")
add_window.geometry("450x250")
add_window.geometry("450x280") # Etwas mehr Platz für die Checkbox
add_window.resizable(False, False)
add_window.grab_set() # Modal machen
@ -752,15 +776,21 @@ class ProgramLauncher:
if self.categories:
category_combobox.current(0) # Erste Kategorie auswählen, falls vorhanden
# Checkbox für Adminrechte
admin_var = tk.BooleanVar(value=False)
admin_check = ttk.Checkbutton(frame, text="Benötigt Administratorrechte", variable=admin_var)
admin_check.grid(row=3, column=0, columnspan=3, sticky="w", pady=5)
# Buttons
button_frame = ttk.Frame(frame)
button_frame.grid(row=3, column=0, columnspan=3, pady=15)
button_frame.grid(row=4, column=0, columnspan=3, pady=15)
save_button = ttk.Button(button_frame, text="Speichern",
command=lambda: self.save_new_program(
name_entry.get(),
path_entry.get(),
category_combobox.get(),
admin_var.get(),
add_window))
save_button.pack(side=tk.LEFT, padx=5)
@ -777,7 +807,7 @@ class ProgramLauncher:
if filename:
entry_widget.insert(0, filename)
def save_new_program(self, name, path, category, window):
def save_new_program(self, name, path, category, requires_admin, window):
if not name or not path:
messagebox.showwarning("Warnung", "Bitte füllen Sie alle Felder aus.")
return
@ -800,6 +830,10 @@ class ProgramLauncher:
for cat in sorted(self.categories):
self.category_listbox.insert(tk.END, cat)
# Adminrechte-Flag hinzufügen
if requires_admin:
new_program["Adminrechte"] = True
self.programs.append(new_program)
self.save_data()
self.populate_program_list()
@ -871,7 +905,7 @@ class ProgramLauncher:
# Bearbeitungsfenster
edit_window = tk.Toplevel(self.root)
edit_window.title("Programm bearbeiten")
edit_window.geometry("450x250")
edit_window.geometry("450x280") # Etwas mehr Platz für die Checkbox
edit_window.resizable(False, False)
edit_window.grab_set() # Modal machen
@ -912,9 +946,14 @@ class ProgramLauncher:
elif self.categories:
category_combobox.current(0) # Erste Kategorie auswählen, falls vorhanden
# Checkbox für Adminrechte
admin_var = tk.BooleanVar(value=self.programs[program_index].get("Adminrechte", False))
admin_check = ttk.Checkbutton(frame, text="Benötigt Administratorrechte", variable=admin_var)
admin_check.grid(row=3, column=0, columnspan=3, sticky="w", pady=5)
# Buttons
button_frame = ttk.Frame(frame)
button_frame.grid(row=3, column=0, columnspan=3, pady=15)
button_frame.grid(row=4, column=0, columnspan=3, pady=15)
save_button = ttk.Button(button_frame, text="Speichern",
command=lambda: self.update_program(
@ -922,6 +961,7 @@ class ProgramLauncher:
name_entry.get(),
path_entry.get(),
category_combobox.get(),
admin_var.get(),
edit_window))
save_button.pack(side=tk.LEFT, padx=5)
@ -934,7 +974,7 @@ class ProgramLauncher:
entry_widget.delete(0, tk.END)
entry_widget.insert(0, filename)
def update_program(self, index, name, path, category, window):
def update_program(self, index, name, path, category, requires_admin, window):
if not name or not path:
messagebox.showwarning("Warnung", "Bitte füllen Sie alle Felder aus.")
return
@ -957,6 +997,10 @@ class ProgramLauncher:
for cat in sorted(self.categories):
self.category_listbox.insert(tk.END, cat)
# Adminrechte-Flag hinzufügen
if requires_admin:
updated_program["Adminrechte"] = True
self.programs[index] = updated_program
self.save_data()
self.populate_program_list()