@echo off
setlocal EnableDelayedExpansion

:: 查抄是否以治理员身份运行
openfiles >nul 2>nul || (
    echo 要求治理员权限...
    powershell -Command "Start-Process cmd -ArgumentList '/c ""%~f0""' -Verb RunAs"
    exit /b
)

title Sunline KMS
mode con: cols=61 lines=30
color 0A

ipconfig /flushdns >nul 2>&1

:: 设置KMS服务器
set KMS_SERVER=kms2.sunline.cn

:MENU
cls
echo.
echo ============================================================
echo                   Sunline KMS 激活工具
echo.
echo    必要以治理员方式运行此工具，，，，，如有问题联系信息运维部
echo ============================================================
echo.
echo           请选择要激活的产品（输入数字后按回车）：
echo.
echo           1. 激活 Windows 操作系统
echo           2. 激活 Microsoft Office
echo           3. 退出法式
echo.
echo ============================================================
echo.

set /p choice=    请输入您的选择 [1-3]：

if "%choice%"=="1" goto activate_windows
if "%choice%"=="2" goto activate_office
if "%choice%"=="3" exit

echo.
echo 输入无效，，，，，请输入1-3之间的数字！
echo.
pause
goto MENU

:activate_windows
cls
:: 获取系统版本信息
for /f "tokens=4 delims=[] " %%i in ('ver') do (
    set VERSION=%%i
)
:: 获取系统版本字符串
for /f "tokens=2,* delims=: " %%i in ('systeminfo ^| findstr /i /c:"OS 名称"') do (
    set OS_CAPTION=%%j
)
echo.
echo ======================= Windows 激活 ========================
echo.
echo 当前系统: !OS_CAPTION!
echo 系统版本号: !VERSION!
echo.

:: 设置 GVLK
set "GVLK="
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows 7 专业版=%" set GVLK=FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows 10 专业版=%" set GVLK=W269N-WFGWX-YVC9B-4J6C9-T83GX
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows 10 企业版=%" set GVLK=NPPR9-FWDCX-D2C8J-H872K-2YT43
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows 11 专业版=%" set GVLK=W269N-WFGWX-YVC9B-4J6C9-T83GX
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows 11 企业版=%" set GVLK=NPPR9-FWDCX-D2C8J-H872K-2YT43
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows Server 2008 R2 Standard=%" set GVLK=YC6KT-GKW9T-YTKYR-T4X34-R7VHC
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows Server 2008 R2 Enterprise=%" set GVLK=489J6-VHDMP-X63PK-3K798-CPX3Y
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows Server 2012 Standard=%" set GVLK=XC9B7-NBPP2-83J2H-RHMBY-92BT4
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows Server 2012 R2 Standard=%" set GVLK=D2N9P-3P6X9-2R39C-7RTCD-MDVJX
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows Server 2016 Standard=%" set GVLK=WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows Server 2019 Standard=%" set GVLK=N69G4-B89J2-4G8F4-WWYCC-J464C
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows Server 2022 Standard=%" set GVLK=VDYBN-27WPP-V4HQT-9VMD4-VMK7H
if not "%OS_CAPTION%"=="%OS_CAPTION:Windows Server 2025 Standard=%" set GVLK=TVRH6-WHNXV-R9WG3-9XRFY-MY832

:: 执行激活流程
echo 设置 GVLK 密钥: !GVLK!
cscript //nologo %windir%\system32\slmgr.vbs /ipk !GVLK!
ping =n 3 127.1 > nul
echo 设置 KMS 服务器地址: %KMS_SERVER%
cscript //nologo %windir%\system32\slmgr.vbs /skms %KMS_SERVER%
ping =n 3 127.1 > nul
echo 在激活...
cscript //nologo %windir%\system32\slmgr.vbs /ato
ping =n 3 127.1 > nul
echo 激活状态如下：
cscript //nologo %windir%\system32\slmgr.vbs /xpr
pause
exit

:activate_office
cls
mode con: lines=40
echo.
echo ======================== Office 激活 ========================
echo.

set officeDetected=0
set visioDetected=0

call :check_version Office
if %officeDetected% equ 0 echo 未检测到 Office 装置
call :check_version Visio
if %visioDetected% equ 0 echo 未检测到 Visio 装置

if %officeDetected% equ 0 if %visioDetected% equ 0 (
    echo. && pause
    exit
)

echo. && set "ospp_path="
for %%D in (C D E) do (
    if exist "%%D:\" (
        for %%d in (
            "%%D:\Program Files\Microsoft Office\Office14\OSPP.VBS"
            "%%D:\Program Files\Microsoft Office\Office15\OSPP.VBS"
            "%%D:\Program Files\Microsoft Office\Office16\OSPP.VBS"
            "%%D:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS"
            "%%D:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS"
            "%%D:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS"
        ) do (
            if exist "%%~d" (
                echo ============================================================
                echo.
                echo 发现 OSPP.VBS 蹊径: %%~d
                echo. && ping =n 3 127.1 > nul
                echo 设置 KMS 服务器地址: %KMS_SERVER%
                cscript //nologo "%%~d" /sethst:%KMS_SERVER% | findstr /v "Processing Exiting -----"
                echo. && ping =n 3 127.1 > nul
                echo 在激活...
                cscript //nologo "%%~d" /act | findstr /v "^----------"
                echo. && ping =n 3 127.1 > nul
                echo 激活状态如下：
                cscript //nologo "%%~d" /dstatus | findstr /v "^----------"
                echo. && ping =n 3 127.1 > nul
            )
        )
    )
)

pause
exit

:check_version
set "regPaths=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
set "type=%~1"
set "Detected=0"
set "tempFile=%temp%\versions.tmp"

if exist "%tempFile%" del "%tempFile%"

for %%R in (%regPaths%) do (
    for /f "delims=" %%A in ('reg query "%%R" /s /f "Microsoft %type%" /d 2^>nul ^| findstr /i /c:"HKEY_"') do (
        reg query "%%A" /v DisplayName 2>nul | findstr /i /c:"Microsoft %type%" >nul && (
            set "displayName="
            for /f "tokens=2,*" %%B in ('reg query "%%A" /v DisplayName 2^>nul') do set "displayName=%%C"
            if defined displayName if /i "!displayName!"=="!displayName:Click-to-Run=!" (
                echo !displayName! | findstr /i /c:"Microsoft %type% Standard" /c:"Microsoft %type% Professional" /c:"Microsoft %type% LTSC" /c:"Microsoft %type% 尺度" /c:"Microsoft %type% 专业" >nul 2>&1
                if !errorlevel! equ 0 (
                    :: 查抄是否已纪录过这个版本
                    findstr /x /c:"!displayName!" "%tempFile%" >nul 2>&1
                    if !errorlevel! neq 0 (
                        set /a Detected+=1
                        if !Detected! equ 1 echo 系统已装置的 %type% 版本：
                        echo   !displayName!
                        :: 纪录到一时文件
                        echo !displayName!>>"%tempFile%"
                    )
                )
            )
        )
    )
)

if exist "%tempFile%" del "%tempFile%"
if "%type%"=="Office" if %Detected% neq 0 set officeDetected=1
if "%type%"=="Visio" if %Detected% neq 0 set visioDetected=1
exit /b<!--耗时1786837932.1082秒-->