main.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/usr/bin/env python3
  2. import sys
  3. import os
  4. import json
  5. from PySide6.QtWidgets import QApplication
  6. from qt_material import apply_stylesheet
  7. from hookvision.config_loader import load_config
  8. from hookvision.main_window import MainWindow
  9. import logging
  10. log_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "hookvision.log")
  11. logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(levelname)s - %(message)s',
  12. handlers=[logging.FileHandler(log_path, encoding='utf-8'), logging.StreamHandler()])
  13. def _autostart_diag():
  14. import winreg
  15. log = []
  16. log.append(f"sys.executable = {sys.executable}")
  17. log.append(f"sys.platform = {sys.platform}")
  18. log.append(f"frozen = {getattr(sys, 'frozen', False)}")
  19. config_dir = os.path.join(os.environ.get("APPDATA", os.path.expanduser("~")), "HookVision")
  20. config_path = os.path.join(config_dir, "autostart.json")
  21. log.append(f"config_path = {config_path}")
  22. try:
  23. os.makedirs(config_dir, exist_ok=True)
  24. with open(config_path, "w", encoding="utf-8") as f:
  25. json.dump({"enabled": True}, f)
  26. with open(config_path, "r", encoding="utf-8") as f:
  27. data = json.load(f)
  28. log.append(f"JSON OK: {data}")
  29. os.remove(config_path)
  30. except Exception as e:
  31. log.append(f"JSON FAIL: {e}")
  32. key = r"Software\Microsoft\Windows\CurrentVersion\Run"
  33. try:
  34. with winreg.OpenKey(winreg.HKEY_CURRENT_USER, key, 0, winreg.KEY_SET_VALUE) as rk:
  35. winreg.SetValueEx(rk, "HookVision", 0, winreg.REG_SZ, sys.executable)
  36. with winreg.OpenKey(winreg.HKEY_CURRENT_USER, key, 0, winreg.KEY_READ) as rk:
  37. val, _ = winreg.QueryValueEx(rk, "HookVision")
  38. log.append(f"Registry OK: {val}")
  39. with winreg.OpenKey(winreg.HKEY_CURRENT_USER, key, 0, winreg.KEY_SET_VALUE) as rk:
  40. winreg.DeleteValue(rk, "HookVision")
  41. except Exception as e:
  42. log.append(f"Registry FAIL: {e}")
  43. msg = "\n".join(log)
  44. print(msg)
  45. with open("autostart_diag.txt", "w", encoding="utf-8") as f:
  46. f.write(msg)
  47. def main():
  48. if "--autostart-test" in sys.argv:
  49. _autostart_diag()
  50. return
  51. app = QApplication(sys.argv)
  52. apply_stylesheet(app, theme='dark_teal.xml')
  53. is_frozen = getattr(sys, 'frozen', False)
  54. config_name = "config.prod.ini" if is_frozen else "config.dev.ini"
  55. if "--prod" in sys.argv:
  56. config_name = "config.prod.ini"
  57. if "--dev" in sys.argv:
  58. config_name = "config.dev.ini"
  59. if getattr(sys, 'frozen', False):
  60. config_path = os.path.join(sys._MEIPASS, config_name)
  61. else:
  62. config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), config_name)
  63. config = load_config(config_path)
  64. window = MainWindow(config, config_path)
  65. window.show()
  66. sys.exit(app.exec())
  67. if __name__ == "__main__":
  68. main()