import ctypes import winreg import shutil import sys import os from time import sleep import shelve # 检查并创建cmd文件的函数 def check_and_create_cmd_files(path): csso_cmd_path = os.path.join(path, 'csso.cmd') css_cmd_path = os.path.join(path, 'css.cmd') if not os.path.isfile(csso_cmd_path): with open(csso_cmd_path, 'w') as csso_file: csso_file.write('@echo off\n') csso_file.write('ren bin bin1\n') csso_file.write('ren bin2 bin\n') if not os.path.isfile(css_cmd_path): with open(css_cmd_path, 'w') as css_file: css_file.write('@echo off\n') css_file.write('ren bin bin2\n') css_file.write('ren bin1 bin\n') def get_steam_path(): try: # 从注册表读取 Steam 安装路径 with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Valve\Steam") as key: steam_path, _ = winreg.QueryValueEx(key, "SteamPath") return steam_path except FileNotFoundError: print("未能找到 Steam 安装路径。") return None def delete_csso_folder(steam_path): target_folder = os.path.join(steam_path, "steamapps", "sourcemods", "csso") if os.path.exists(target_folder): print(f"正在删除文件夹: {target_folder}") shutil.rmtree(target_folder) # 递归删除文件夹及其内容 print("文件夹已删除。") else: print(f"文件夹不存在: {target_folder}") with shelve.open('main') as db: # 如果数据库中没有 'bin_name',返回 '1'(默认值) bin_name = db.get('bin_name', '1') if bin_name is None: bin_name = '1' # 这里设为字符串以保持一致 db['bin_name'] = bin_name def is_admin(): """检查当前是否有管理员权限""" try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False if is_admin(): # 如果已经是管理员,执行主要的逻辑 print("已获得管理员权限") path = os.getcwd() # 获取当前工作目录的实际路径 # 检查并创建cmd文件 check_and_create_cmd_files(path) print(f"当前模式(1为CS原版, 2为CS:SO): {bin_name}") print("请选择模式") print("1. 改为CS:SO\n2. 改回原版\n3. 删除CSSO并删除程序\n4. 退出") choice = input('>>> ') if choice == '1': if bin_name == '2': print('错误,你已是CS:SO!') sleep(1.5) sys.exit() # 启动 csso.cmd os.startfile(os.path.join(path, 'csso.cmd')) with shelve.open('main') as db: db['bin_name'] = '2' # 切换至 CS:SO print("完成!") sleep(1.85) sys.exit() elif choice == '2': if bin_name == '1': print("错误,你已是原版!") sleep(1.5) sys.exit() # 启动 css.cmd os.startfile(os.path.join(path, 'css.cmd')) with shelve.open('main') as db: db['bin_name'] = '1' # 切换至 CS 原版 print("完成!") sleep(1.55) sys.exit() elif choice == '3': if input('确定吗?\n 1.确定 2.不确定\n>>>') == '1': with open('del.cmd','w') as d: d.write('@echo off\n') d.write('timeout /t 2 /nobreak > nul\n') d.write('del /Q csso.cmd css.cmd change.exe main.bak main.dat main.dir\n') d.write('del "%~f0"') if bin_name != '1': os.startfile(path,'css.cmd') steam_path = get_steam_path() if steam_path: delete_csso_folder(steam_path) os.rmdir(f'{path}\\bin2') os.startfile(os.path.join(path , 'del.cmd')) else: sys.exit() elif choice == '4': sys.exit() else: print("输入错误!") else: # 如果没有管理员权限,重新以管理员权限运行脚本 print("请求管理员权限...") # 使用 `ctypes` 模块提升权限,重新运行脚本 ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)