Unterstützung für Administratorrechte hinzugefügt
This commit is contained in:
parent
1bd34ec5bf
commit
edf0012917
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
|
||||
data.json
|
||||
Programm-Shortcut.7z
|
||||
|
64
run.py
64
run.py
@ -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(),
|
||||
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
|
||||
|
||||
@ -911,17 +945,23 @@ class ProgramLauncher:
|
||||
category_combobox.set(program_category)
|
||||
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(
|
||||
program_index,
|
||||
name_entry.get(),
|
||||
path_entry.get(),
|
||||
category_combobox.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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user