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
|
data.json
|
||||||
|
Programm-Shortcut.7z
|
||||||
|
58
run.py
58
run.py
@ -456,7 +456,7 @@ class ProgramLauncher:
|
|||||||
info_frame.grid(row=4, column=0, columnspan=2, sticky="ew", pady=5)
|
info_frame.grid(row=4, column=0, columnspan=2, sticky="ew", pady=5)
|
||||||
|
|
||||||
# Version
|
# 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")
|
version_label.pack(anchor="w")
|
||||||
|
|
||||||
# Copyright & Autor Info
|
# Copyright & Autor Info
|
||||||
@ -705,9 +705,33 @@ class ProgramLauncher:
|
|||||||
return
|
return
|
||||||
|
|
||||||
item_id = selected_items[0]
|
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]
|
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:
|
try:
|
||||||
|
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)
|
subprocess.Popen(program_path)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
messagebox.showerror("Fehler", f"Fehler beim Starten des Programms: {str(e)}")
|
messagebox.showerror("Fehler", f"Fehler beim Starten des Programms: {str(e)}")
|
||||||
@ -715,7 +739,7 @@ class ProgramLauncher:
|
|||||||
def add_program(self):
|
def add_program(self):
|
||||||
add_window = tk.Toplevel(self.root)
|
add_window = tk.Toplevel(self.root)
|
||||||
add_window.title("Programm hinzufügen")
|
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.resizable(False, False)
|
||||||
add_window.grab_set() # Modal machen
|
add_window.grab_set() # Modal machen
|
||||||
|
|
||||||
@ -752,15 +776,21 @@ class ProgramLauncher:
|
|||||||
if self.categories:
|
if self.categories:
|
||||||
category_combobox.current(0) # Erste Kategorie auswählen, falls vorhanden
|
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
|
# Buttons
|
||||||
button_frame = ttk.Frame(frame)
|
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",
|
save_button = ttk.Button(button_frame, text="Speichern",
|
||||||
command=lambda: self.save_new_program(
|
command=lambda: self.save_new_program(
|
||||||
name_entry.get(),
|
name_entry.get(),
|
||||||
path_entry.get(),
|
path_entry.get(),
|
||||||
category_combobox.get(),
|
category_combobox.get(),
|
||||||
|
admin_var.get(),
|
||||||
add_window))
|
add_window))
|
||||||
save_button.pack(side=tk.LEFT, padx=5)
|
save_button.pack(side=tk.LEFT, padx=5)
|
||||||
|
|
||||||
@ -777,7 +807,7 @@ class ProgramLauncher:
|
|||||||
if filename:
|
if filename:
|
||||||
entry_widget.insert(0, 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:
|
if not name or not path:
|
||||||
messagebox.showwarning("Warnung", "Bitte füllen Sie alle Felder aus.")
|
messagebox.showwarning("Warnung", "Bitte füllen Sie alle Felder aus.")
|
||||||
return
|
return
|
||||||
@ -800,6 +830,10 @@ class ProgramLauncher:
|
|||||||
for cat in sorted(self.categories):
|
for cat in sorted(self.categories):
|
||||||
self.category_listbox.insert(tk.END, cat)
|
self.category_listbox.insert(tk.END, cat)
|
||||||
|
|
||||||
|
# Adminrechte-Flag hinzufügen
|
||||||
|
if requires_admin:
|
||||||
|
new_program["Adminrechte"] = True
|
||||||
|
|
||||||
self.programs.append(new_program)
|
self.programs.append(new_program)
|
||||||
self.save_data()
|
self.save_data()
|
||||||
self.populate_program_list()
|
self.populate_program_list()
|
||||||
@ -871,7 +905,7 @@ class ProgramLauncher:
|
|||||||
# Bearbeitungsfenster
|
# Bearbeitungsfenster
|
||||||
edit_window = tk.Toplevel(self.root)
|
edit_window = tk.Toplevel(self.root)
|
||||||
edit_window.title("Programm bearbeiten")
|
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.resizable(False, False)
|
||||||
edit_window.grab_set() # Modal machen
|
edit_window.grab_set() # Modal machen
|
||||||
|
|
||||||
@ -912,9 +946,14 @@ class ProgramLauncher:
|
|||||||
elif self.categories:
|
elif self.categories:
|
||||||
category_combobox.current(0) # Erste Kategorie auswählen, falls vorhanden
|
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
|
# Buttons
|
||||||
button_frame = ttk.Frame(frame)
|
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",
|
save_button = ttk.Button(button_frame, text="Speichern",
|
||||||
command=lambda: self.update_program(
|
command=lambda: self.update_program(
|
||||||
@ -922,6 +961,7 @@ class ProgramLauncher:
|
|||||||
name_entry.get(),
|
name_entry.get(),
|
||||||
path_entry.get(),
|
path_entry.get(),
|
||||||
category_combobox.get(),
|
category_combobox.get(),
|
||||||
|
admin_var.get(),
|
||||||
edit_window))
|
edit_window))
|
||||||
save_button.pack(side=tk.LEFT, padx=5)
|
save_button.pack(side=tk.LEFT, padx=5)
|
||||||
|
|
||||||
@ -934,7 +974,7 @@ class ProgramLauncher:
|
|||||||
entry_widget.delete(0, tk.END)
|
entry_widget.delete(0, tk.END)
|
||||||
entry_widget.insert(0, filename)
|
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:
|
if not name or not path:
|
||||||
messagebox.showwarning("Warnung", "Bitte füllen Sie alle Felder aus.")
|
messagebox.showwarning("Warnung", "Bitte füllen Sie alle Felder aus.")
|
||||||
return
|
return
|
||||||
@ -957,6 +997,10 @@ class ProgramLauncher:
|
|||||||
for cat in sorted(self.categories):
|
for cat in sorted(self.categories):
|
||||||
self.category_listbox.insert(tk.END, cat)
|
self.category_listbox.insert(tk.END, cat)
|
||||||
|
|
||||||
|
# Adminrechte-Flag hinzufügen
|
||||||
|
if requires_admin:
|
||||||
|
updated_program["Adminrechte"] = True
|
||||||
|
|
||||||
self.programs[index] = updated_program
|
self.programs[index] = updated_program
|
||||||
self.save_data()
|
self.save_data()
|
||||||
self.populate_program_list()
|
self.populate_program_list()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user