cmd脚本解锁手机屏幕
adb解锁手机屏幕数字密码
cmd命令通过adb解锁手机屏幕
bash脚本解锁手机屏幕
首先查看是否需要唤醒屏幕(可选)
- 电源屏幕状态检测模块 (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
使用说明:
保存文件:将第一个脚本保存为
power_check.bat,第二个脚本保存为unlock_screen.bat运行方式:
- 双击
unlock_screen.bat运行 - 或者在命令提示符中执行:
unlock_screen.bat
- 双击
注意事项:
- 确保 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