-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall_chapter_menu.py
More file actions
148 lines (115 loc) · 3.95 KB
/
Copy pathinstall_chapter_menu.py
File metadata and controls
148 lines (115 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/usr/bin/env python3
"""
安装/卸载「按章节分组」右键菜单项
需要以管理员权限运行
"""
import sys
import ctypes
import winreg
from pathlib import Path
SCRIPT_PATH = Path(__file__).parent / "chapter_group.py"
MENU_NAME = "按章节分组"
MENU_NAME_BATCH = "批量按章节分组"
# 注册表路径
REG_KEY_DIR = r"Directory\shell\ChapterGroup" # 文件夹右键菜单
REG_KEY_BG = r"Directory\Background\shell\ChapterGroupBatch" # 文件夹空白处右键菜单(已废弃)
def is_admin() -> bool:
"""检查是否以管理员权限运行"""
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
def run_as_admin():
"""请求管理员权限重新运行"""
ctypes.windll.shell32.ShellExecuteW(
None, "runas", sys.executable, " ".join([f'"{arg}"' for arg in sys.argv]), None, 1
)
def get_python_path() -> str:
"""获取Python解释器路径"""
return sys.executable
def install_context_menu():
"""安装右键菜单"""
python_path = get_python_path()
script_path = str(SCRIPT_PATH.resolve())
try:
key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, REG_KEY_DIR)
winreg.SetValue(key, "", winreg.REG_SZ, MENU_NAME)
winreg.SetValueEx(key, "Icon", 0, winreg.REG_SZ, "shell32.dll,3")
winreg.CloseKey(key)
command_key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, REG_KEY_DIR + r"\command")
command = f'"{python_path}" "{script_path}" "%V"'
winreg.SetValue(command_key, "", winreg.REG_SZ, command)
winreg.CloseKey(command_key)
print("✓ 文件夹右键菜单已安装")
print(f"\n Python路径: {python_path}")
print(f" 脚本路径: {script_path}")
print("\n现在右键点击文件夹,即可看到「按章节分组」选项")
except PermissionError:
print("✗ 错误: 需要管理员权限")
print(" 请右键点击此脚本,选择「以管理员身份运行」")
return False
except Exception as e:
print(f"✗ 安装失败: {e}")
return False
return True
def uninstall_context_menu():
"""卸载右键菜单"""
try:
try:
winreg.DeleteKey(winreg.HKEY_CLASSES_ROOT, REG_KEY_DIR + r"\command")
except FileNotFoundError:
pass
try:
winreg.DeleteKey(winreg.HKEY_CLASSES_ROOT, REG_KEY_DIR)
except FileNotFoundError:
pass
print("✓ 文件夹右键菜单已卸载")
# 卸载废弃的空白处右键菜单
try:
winreg.DeleteKey(winreg.HKEY_CLASSES_ROOT, REG_KEY_BG + r"\command")
except FileNotFoundError:
pass
try:
winreg.DeleteKey(winreg.HKEY_CLASSES_ROOT, REG_KEY_BG)
except FileNotFoundError:
pass
print("✓ 空白处右键菜单已卸载")
except PermissionError:
print("✗ 错误: 需要管理员权限")
return False
except Exception as e:
print(f"✗ 卸载失败: {e}")
return False
return True
def main():
print("=" * 50)
print(" 按章节分组 - 右键菜单安装程序")
print("=" * 50)
print()
# 检查管理员权限
if not is_admin():
print("需要管理员权限,正在请求...")
run_as_admin()
sys.exit(0)
if not SCRIPT_PATH.exists():
print(f"✗ 错误: 找不到主脚本 {SCRIPT_PATH}")
input("按回车键退出...")
sys.exit(1)
print("请选择操作:")
print(" 1. 安装右键菜单")
print(" 2. 卸载右键菜单")
print(" 0. 退出")
print()
choice = input("请输入选项 [1/2/0]: ").strip()
if choice == "1":
install_context_menu()
elif choice == "2":
uninstall_context_menu()
elif choice == "0":
print("已退出")
else:
print("无效选项")
print()
input("按回车键退出...")
if __name__ == '__main__':
main()