| import wx
|
| import sys
|
| import threading
|
| import queue
|
| import time
|
| import os
|
| from gui import MainFrame
|
| from tray import start_tray_monitoring, shutdown_requested
|
| from hardware import detect_hardware
|
|
|
|
|
|
|
| def start_gui_and_get_selection(hardware_info, result_queue):
|
| class App(wx.App):
|
| def OnInit(self):
|
| self.frame = MainFrame(None, hardware_info=hardware_info, result_queue=result_queue)
|
| self.frame.Show()
|
| return True
|
|
|
| app = App(False)
|
| app.MainLoop()
|
|
|
|
|
| def save_exe_dir_to_meipass():
|
| try:
|
|
|
| if hasattr(sys, '_MEIPASS'):
|
| meipass_dir = sys._MEIPASS
|
| else:
|
| print("[WARN] Kein MEIPASS gefunden (nicht als EXE gestartet). Überspringe Speichern.")
|
| return
|
|
|
|
|
| if getattr(sys, 'frozen', False):
|
|
|
| exe_path = sys.executable
|
| else:
|
|
|
| exe_path = os.path.abspath(__file__)
|
|
|
|
|
| output_file = os.path.join(meipass_dir, "startdir.txt")
|
|
|
| with open(output_file, "w", encoding="utf-8") as f:
|
|
|
| f.write(f"{exe_path}\n")
|
|
|
| print(f"[INFO] Startverzeichnis und Startdatei gespeichert in MEIPASS: {output_file}")
|
| except Exception as e:
|
| print(f"[ERROR] Fehler beim Schreiben der startdir.txt: {e}")
|
|
|
|
|
| if __name__ == "__main__":
|
| try:
|
| time.sleep(0.5)
|
|
|
|
|
| save_exe_dir_to_meipass()
|
|
|
| print("[DEBUG] Starte hardware.py...")
|
| hardware_info = detect_hardware()
|
| print("[DEBUG] hardware.py exit...")
|
|
|
| result_queue = queue.Queue()
|
|
|
|
|
| start_gui_and_get_selection(hardware_info, result_queue)
|
|
|
| print("[INFO] GUI beendet.")
|
|
|
| try:
|
| selected_components = result_queue.get(timeout=11)
|
| tray_should_start = any([
|
| selected_components.get('cpu'),
|
| selected_components.get('ram'),
|
| selected_components.get('gpu'),
|
| selected_components.get('network'),
|
| bool(selected_components.get('drives'))
|
| ])
|
| except queue.Empty:
|
| print("[WARN] Keine Rückgabe durch GUI. Traymonitor wird nicht gestartet.")
|
| tray_should_start = False
|
|
|
| if tray_should_start:
|
| print("[INFO] Auswahl empfangen:", selected_components)
|
| time.sleep(1)
|
|
|
| tray_thread = threading.Thread(
|
| target=start_tray_monitoring,
|
| args=(hardware_info, selected_components),
|
| daemon=False
|
| )
|
| tray_thread.start()
|
|
|
|
|
| while not shutdown_requested.wait(timeout=0.1):
|
| pass
|
|
|
| print("[INFO] Tray-Exit wurde erkannt – beende main.py.")
|
| sys.exit(0)
|
|
|
|
|
| print("[INFO] Tray-Monitoring gestartet. GUI ist geschlossen.")
|
| tray_thread.join()
|
| else:
|
| print("[INFO] Programm wird beendet, da keine Auswahl getroffen wurde (GUI geschlossen).")
|
| sys.exit(0)
|
|
|
| except KeyboardInterrupt:
|
| print("[INFO] Manuell beendet.")
|
| sys.exit(0)
|
| except Exception as e:
|
| print(f"[ERROR] Unerwarteter Fehler: {e}", file=sys.stderr)
|
| sys.exit(1)
|
|
|
|
|