@setlocal DisableDelayedExpansion
@echo off
@cls

:: Check-Activation-Status
:: Written by @abbodi1406
:: forums.mydigitallife.net/posts/838808

set _args=
set _args=%*
for %%A in (%_args%) do (
    if /i "%%A"=="-wow" set _rel1=1
    if /i "%%A"=="-arm" set _rel2=1
)

set "_cmdf=%~f0"

:: Handle WOW64 and ARM scenarios
if exist "%SystemRoot%\Sysnative\cmd.exe" if not defined _rel1 (
    setlocal EnableDelayedExpansion
    start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" -wow"
    exit /b
)
if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 if not defined _rel2 (
    setlocal EnableDelayedExpansion
    start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" -arm"
    exit /b
)

:: Set console appearance
color 07
title Check Activation Status [vbs]

:: Update system paths for running commands
set "SysPath=%SystemRoot%\System32"
set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
if exist "%SystemRoot%\Sysnative\reg.exe" (
    set "SysPath=%SystemRoot%\Sysnative"
    set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
)

:: Check for LF line ending issues
pushd "%~dp0"
>nul findstr /v "$" "%~nx0" && (
    echo:
    echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
    echo:
    ping 127.0.0.1 -n 6 >nul
    popd
    exit /b
)
popd

:: Detect Office Ohook installation
set ohook=
for %%# in (15 16) do (
    for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do (
        if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set ohook=1
    )
)

for %%# in (System SystemX86) do (
    for %%G in ("Office 15" "Office") do (
        for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do (
            if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" set ohook=1
        )
    )
)

:: Determine system architecture
set "_bit=64"
set "_wow=1"
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" set "_wow=0"&set "_bit=32"

:: Initialize variables
set "_utemp=%TEMP%"
set "line2=************************************************************"
set "line3=____________________________________________________________"
set _sO16vbs=0
set _sO15vbs=0

:: Check for Office 2013/2016/2019/2021 installations
for %%v in (15 16) do (
    for %%P in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do (
        if exist "%%~P\Microsoft Office\Office%%v\ospp.vbs" (
            if %%v==15 set _sO15vbs=1
            if %%v==16 set _sO16vbs=1
        )
    )
)

:: Display Windows activation status
setlocal EnableDelayedExpansion
echo %line2%
echo ***                   Windows Status                     ***
echo %line2%
pushd "!_utemp!"
copy /y %SystemRoot%\System32\slmgr.vbs . >nul 2>&1
net start sppsvc /y >nul 2>&1
cscript //nologo slmgr.vbs /dli || (
    echo Error executing slmgr.vbs
    del /f /q slmgr.vbs
    popd
    goto :casVend
)
cscript //nologo slmgr.vbs /xpr
del /f /q slmgr.vbs >nul 2>&1
popd
echo %line3%

:: Display Office activation status if Ohook is installed
if defined ohook (
    echo.
    echo.
    echo %line2%
    echo ***            Office Ohook Activation Status            ***
    echo %line2%
    echo.
    powershell "write-host -back 'Black' -fore 'Yellow' 'Ohook for permanent Office activation is installed.'; write-host -back 'Black' -fore 'Yellow' 'You can ignore below Office activation status.'"
    echo.
)

:: Check Office 2016 and 2019 activation status
:casVo16
set office=
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do set "office=%%b"
if exist "!office!\ospp.vbs" (
    echo.
    echo %line2%
    if %_sO15vbs% EQU 0 (
        echo ***              Office 2016 %_bit%-bit Status               ***
    ) else (
        echo ***               Office 2013/2016 Status                ***
    )
    echo %line2%
    cscript //nologo "!office!\ospp.vbs" /dstatus
)
if %_wow%==0 goto :casVo13
set office=
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do set "office=%%b"
if exist "!office!\ospp.vbs" (
    echo.
    echo %line2%
    if %_sO15vbs% EQU 0 (
        echo ***              Office 2016 32-bit Status               ***
    ) else (
        echo ***               Office 2013/2016 Status                ***
    )
    echo %line2%
    cscript //nologo "!office!\ospp.vbs" /dstatus
)

:: Check Office 2013 activation status
:casVo13
if %_sO16vbs% EQU 1 goto :casVo10
set office=
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot /v Path" 2^>nul') do set "office=%%b"
if exist "!office!\ospp.vbs" (
    echo.
    echo %line2%
    echo ***              Office 2013 %_bit%-bit Status               ***
    echo %line2%
    cscript //nologo "!office!\ospp.vbs" /dstatus
)
if %_wow%==0 goto :casVo10
set office=
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Common\InstallRoot /v Path" 2^>nul') do set "office=%%b"
if exist "!office!\ospp.vbs" (
    echo.
    echo %line2%
    echo ***              Office 2013 32-bit Status               ***
    echo %line2%
    cscript //nologo "!office!\ospp.vbs" /dstatus
)

:: Check Office 2010 activation status
:casVo10
set office=
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot /v Path" 2^>nul') do set "office=%%b"
if exist "!office!\ospp.vbs" (
    echo.
    echo %line2%
    echo ***              Office 2010 %_bit%-bit Status               ***
    echo %line2%
    cscript //nologo "!office!\ospp.vbs" /dstatus
)
if %_wow%==0 goto :casVc16
set office=
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Common\InstallRoot /v Path" 2^>nul') do set "office=%%b"
if exist "!office!\ospp.vbs" (
    echo.
    echo %line2%
    echo ***              Office 2010 32-bit Status               ***
    echo %line2%
    cscript //nologo "!office!\ospp.vbs" /dstatus
)

:: Check Office Click-to-Run activation status
:casVc16
reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath >nul 2>&1 || (
    reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath >nul 2>&1 && set "install32=1"
)
if defined install32 (
    for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do set "office=%%b"
) else (
    for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do set "office=%%b"
)
if exist "!office!\ospp.vbs" (
    echo.
    echo %line2%
    echo ***         Office Click-to-Run %_bit%-bit Status         ***
    echo %line2%
    cscript //nologo "!office!\ospp.vbs" /dstatus
)

:: End script
:casVend
echo.
echo %line3%
echo ***                Script Ended                          ***
echo %line3%
exit /b