初始提交
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
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 _get_app_dir() -> str:
|
||||
if getattr(sys, 'frozen', False):
|
||||
return os.path.dirname(sys.executable)
|
||||
return os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
def _get_command() -> str:
|
||||
if getattr(sys, 'frozen', False):
|
||||
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()
|
||||
Reference in New Issue
Block a user