cmd脚本解锁手机屏幕

adb解锁手机屏幕数字密码

cmd命令通过adb解锁手机屏幕

bash脚本解锁手机屏幕

首先查看是否需要唤醒屏幕(可选)

  1. 电源屏幕状态检测模块 (power_check.sh)
#!/bin/bash
# 功能:检测并确保屏幕处于唤醒状态
# 返回值:0-已唤醒 1-需要唤醒 
export LANG=en_US.UTF-8
check_power_state() {
    power_info=$(adb shell dumpsys power | grep -E "Display Power: state=|mWakefulness=|mScreenOn|mHoldingDisplaySuspendBlocker")
    wakefulness=$(echo "$power_info" | grep -o "mWakefulness=[^ ]*" | cut -d= -f2-)
    holding_blocker=$(echo "$power_info" | grep -o "mHoldingDisplaySuspendBlocker=[^ ]*" | cut -d= -f2-)

    if [[ "$wakefulness" == *"Awake"* ]] && [[ "$holding_blocker" == *"true"* ]]; then
        echo "Screen already awake"
        return 0
    else
        echo "Waking up device..."
        return 1
    fi
}
check_power_state
exit $?

调用方式 如果 ./power_check.sh 执行失败(返回码非 0),就执行花括号 { ... } 中的内容

#!/bin/bash
# 方案1: 设置正确的编码环境 
export LANG=en_US.UTF-8 
# 1. 唤醒设备
bash power_check.sh || { 
    adb shell input keyevent KEYCODE_WAKEUP
    sleep 1
    adb shell input swipe 500 1400 500 300
    sleep 2
    adb  shell input tap 838  1315
    adb  shell input tap 838  1315
    adb  shell input tap 838  1315
    adb  shell input tap 838  1315 
}

shell 脚本转换为 Windows CMD 批处理脚本的版本:

1. 电源屏幕状态检测模块 (power_check.bat)

@echo off
setlocal enabledelayedexpansion
:: 功能:检测并确保屏幕处于唤醒状态
:: 返回值:0-已唤醒 1-需要唤醒 

:: 设置编码环境(Windows 使用默认编码)
chcp 65001 >nul

:check_power_state
:: 获取电源状态信息
for /f "usebackq delims=" %%i in (`adb shell dumpsys power ^| findstr /C:"Display Power: state=" /C:"mWakefulness=" /C:"mScreenOn" /C:"mHoldingDisplaySuspendBlocker"`) do (
    set "power_info=!power_info! %%i"
)

:: 提取 wakefulness 状态
set "wakefulness="
for /f "tokens=2 delims==" %%i in ('echo !power_info! ^| findstr "mWakefulness="') do (
    set "wakefulness=%%i"
)

:: 提取 holding_blocker 状态
set "holding_blocker="
for /f "tokens=2 delims==" %%i in ('echo !power_info! ^| findstr "mHoldingDisplaySuspendBlocker="') do (
    set "holding_blocker=%%i"
)

:: 检查状态并返回相应值
if not "!wakefulness!"=="" if not "!holding_blocker!"=="" (
    echo !wakefulness! | find "Awake" >nul && echo !holding_blocker! | find "true" >nul
    if !errorlevel! equ 0 (
        echo Screen already awake
        exit /b 0
    )
)

echo Waking up device...
exit /b 1

2. 主脚本 (unlock_screen.bat)

@echo off
setlocal enabledelayedexpansion

:: 设置编码环境
chcp 65001 >nul

:: 1. 唤醒设备
call power_check.bat
if !errorlevel! neq 0 (
    echo Device needs to be woken up...
    adb shell input keyevent KEYCODE_WAKEUP
    timeout /t 1 /nobreak >nul
    adb shell input swipe 500 1400 500 300
    timeout /t 2 /nobreak >nul
    adb shell input tap 838 1315
    adb shell input tap 838 1315
    adb shell input tap 838 1315
    adb shell input tap 838 1315
) else (
    echo Screen is already awake
)

echo Unlock process completed
pause

使用说明:

  1. 保存文件:将第一个脚本保存为 power_check.bat,第二个脚本保存为 unlock_screen.bat

  2. 运行方式

    • 双击 unlock_screen.bat 运行
    • 或者在命令提示符中执行:unlock_screen.bat
  3. 注意事项

    • 确保 ADB 已正确安装并在 PATH 环境变量中
    • 确保设备已通过 USB 连接并启用了 USB 调试
    • 坐标值 (838, 1315) 可能需要根据您的设备屏幕分辨率进行调整

主要更改说明:

  • #!/bin/bash 改为 @echo off
  • export LANG=en_US.UTF-8 改为 chcp 65001(设置 UTF-8 编码)
  • grep 命令改为 findstr
  • cut 命令改为 for /f 循环解析
  • sleep 命令改为 timeout
  • || 逻辑改为 if errorlevel 检查
  • 添加了 setlocal enabledelayedexpansion 来支持变量延迟扩展

这些脚本应该能够在 Windows 命令提示符下正常工作,实现与原始 shell 脚本相同的功能。

合并脚本

@echo off
setlocal enabledelayedexpansion

:: 设置编码环境
chcp 65001 >nul

:: 主函数
call :main
exit /b 0

:: 主程序
:main
echo Checking device power state...
call :check_power_state
if !errorlevel! neq 0 (
    echo Device needs to be woken up...
    adb shell input keyevent KEYCODE_WAKEUP
    timeout /t 1 /nobreak >nul
    adb shell input swipe 500 1400 500 300
    timeout /t 2 /nobreak >nul
    adb shell input text "1234"
    echo Device unlocked successfully
) else (
    echo Screen is already awake
)
goto :eof

:: 电源状态检测函数
:check_power_state
setlocal
set "power_info="
set "wakefulness="
set "holding_blocker="

:: 获取电源状态信息
for /f "usebackq delims=" %%i in (`adb shell dumpsys power ^| findstr /C:"Display Power: state=" /C:"mWakefulness=" /C:"mScreenOn" /C:"mHoldingDisplaySuspendBlocker" 2^>nul`) do (
    set "line=%%i"
    set "power_info=!power_info! !line!"
)

:: 检查是否成功获取到信息
if "!power_info!"=="" (
    echo Failed to get power information
    endlocal
    exit /b 1
)

:: 提取 wakefulness 状态
for /f "tokens=2 delims==" %%i in ('echo !power_info! ^| findstr "mWakefulness="') do (
    set "wakefulness=%%i"
)

:: 提取 holding_blocker 状态
for /f "tokens=2 delims==" %%i in ('echo !power_info! ^| findstr "mHoldingDisplaySuspendBlocker="') do (
    set "holding_blocker=%%i"
)

:: 调试信息(可选)
echo Debug: wakefulness=!wakefulness!
echo Debug: holding_blocker=!holding_blocker!

:: 检查状态并返回相应值
if not "!wakefulness!"=="" if not "!holding_blocker!"=="" (
    echo !wakefulness! | find "Awake" >nul
    set "wake_awake=!errorlevel!"
    
    echo !holding_blocker! | find "true" >nul
    set "blocker_true=!errorlevel!"
    
    if !wake_awake! equ 0 if !blocker_true! equ 0 (
        echo Screen already awake
        endlocal
        exit /b 0
    )
)

echo Waking up device...
endlocal
exit /b 1

:: 错误处理
:error
echo An error occurred during the unlock process
pause
exit /b 1