import os import sys import logging import winreg logger = logging.getLogger(__name__) REG_KEY = r"Software\Classes\Directory\Background\shell\RefreshWallpaper" COMMAND_KEY = REG_KEY + r"\command" MENU_NAME = "刷新壁纸(&R)" def _is_frozen() -> bool: return getattr(sys, 'frozen', False) or '__compiled__' in sys.modules def _get_app_dir() -> str: if _is_frozen(): return os.path.dirname(sys.executable) return os.path.dirname(os.path.abspath(__file__)) def _get_command() -> str: if _is_frozen(): return f'"{sys.executable}" --refresh' else: base = os.path.dirname(sys.executable) pythonw = os.path.join(base, "pythonw.exe") if not os.path.exists(pythonw): pythonw = sys.executable script = os.path.join(_get_app_dir(), "refresh.py") return f'"{pythonw}" "{script}"' def _get_icon_path() -> str: return os.path.join(_get_app_dir(), "assets", "icon.ico") def install() -> bool: command = _get_command() icon = _get_icon_path() try: key = winreg.CreateKey(winreg.HKEY_CURRENT_USER, REG_KEY) winreg.SetValueEx(key, "", 0, winreg.REG_SZ, MENU_NAME) if os.path.exists(icon): winreg.SetValueEx(key, "Icon", 0, winreg.REG_SZ, icon) winreg.CloseKey(key) key = winreg.CreateKey(winreg.HKEY_CURRENT_USER, COMMAND_KEY) winreg.SetValueEx(key, "", 0, winreg.REG_SZ, command) winreg.CloseKey(key) logger.info("Desktop right-click menu installed: %s", MENU_NAME) return True except Exception as e: logger.error("Failed to install menu: %s", e) return False def uninstall() -> bool: try: key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, REG_KEY) winreg.CloseKey(key) except FileNotFoundError: logger.info("Menu not installed, nothing to uninstall") return True try: winreg.DeleteKey(winreg.HKEY_CURRENT_USER, COMMAND_KEY) logger.info("Deleted registry key: %s", COMMAND_KEY) except Exception as e: logger.warning("Failed to delete command key: %s", e) try: winreg.DeleteKey(winreg.HKEY_CURRENT_USER, REG_KEY) logger.info("Deleted registry key: %s", REG_KEY) except Exception as e: logger.error("Failed to delete menu key: %s", e) return False logger.info("Desktop right-click menu uninstalled") return True if __name__ == "__main__": logging.basicConfig(level=logging.INFO) if len(sys.argv) > 1 and sys.argv[1] == "uninstall": uninstall() else: install()