From Newsgroup: comp.mobile.android
Maria Sophia wrote:
Turns out once paired, the PC is permanently authorized to connect
to that phone over Wi-Fi, regardless of what port is used next
(until the phone is rebooted).
The script is working perfectly to connect the desktop & phone
over Wi-Fi by asking for the bare-minimum connection information.
However... I noted a spurious warning in the output, which shows
up as an error but which is a warning due to the script logic.
After rebooting the desktop & the phone, running it in the morning
adbconnect
=== ADB Wireless Auto-Connect ===
Using ADB: "C:\app\editor\android\scrcpy\adb.exe"
Checking existing ADB devices...
* daemon not running; starting now at tcp:5037
* daemon started successfully
Not connected. Need to pair.
Necessary pairing information will be shown on the phone:
Phone IP [192.168.1.4] : <return>
Wireless debugging pairing port :45811
Wireless debugging pairing code :359070
Pairing with: 192.168.1.4:45811
Successfully paired to 192.168.1.4:45811 [guid=adb-SERIAL-GUID]
Skipping obsolete debug-port connect step...
Switching to TCP/IP 5555...
error: no devices/emulators found <============huh???
Connecting final port: 192.168.1.4:5555
connected to 192.168.1.4:5555
Launching scrcpy completely silent...
Done.
The updated version below eliminates the adb tcpip 5555 step because
wireless debugging already runs ADB over port 5555 internally anyway.
While I was improving the logic, I removed extraneous connection steps.
:: adbconnect.bat (Automate Android-to-desktop Wi-Fi adb/scrcpy connections)
:: Solves two problems when connecting a desktop to adb/scrcpy for Android.
:: 1. Eliminate all useless random-security steps in a Wi-Fi adb connection
:: 2. Eliminate the useless scrcpy console window which just takes up space
:: v1p9 20260620
:: Added logic to avoid unnecessary reconnect attempts
:: While v1p8 was working flawlessly, an extraneous error showed up:
:: Checking existing ADB devices...
:: * daemon not running; starting now at tcp:5037
:: * daemon started successfully
:: Not connected. Need to pair.
:: Necessary pairing information will be shown on the phone:
:: Phone IP [192.168.1.4] :
:: Wireless debugging pairing port :45811
:: Wireless debugging pairing code :359070
:: Pairing with: 192.168.1.4:45811
:: Successfully paired to 192.168.1.4:45811 [guid=adb-SERIAL-GUID]
:: Skipping obsolete debug-port connect step...
:: Switching to TCP/IP 5555...
:: error: no devices/emulators found
:: Connecting final port: 192.168.1.4:5555
:: connected to 192.168.1.4:5555
:: Launching scrcpy completely silent...
:: Done.
:: This version skips the adb tcpip 5555 step entirely when using
:: wireless debugging pairing because wireless debugging already
:: runs ADB over port 5555 internally so we do not need to switch modes.
:: v1p8 20260619
:: a. The debug port user-input query was removed
:: b. And the pairing to TCP/IP flow was simplified as a result
:: c. Plus, detection of scrcpy already running was added to prevent scrcpy
:: from respawning if it was already running when adbconnect is run.
:: Note: While Wi-Fi pairing replaces the need for the USB cable,
:: once paired, the Android debug port actually becomes irrelevant.
:: Once paired, even if the PC is rebooted, the PC is permanently authorized
:: to connect to that phone over Wi-Fi regardless of the debug port.
:: (ADB pairing only needs to be replenished after the phone has rebooted.)
:: v1p7 20260615
:: Removed the requirement for the "no-console" vbs script
:: by injecting the necessary commands into a temporary file
:: This is the cleanest way I can think of to eliminate the console.
:: v1p6 20260614
:: Called the vbs "no-console" script that comes with adb.
:: If the script isn't there, then it defaults to the old method.
:: The problem is getting completely rid of the scrcpy console isn't working.
:: These are the known scrcpy console-hiding methods:
:: (a) cmd /c start "" /min (minimizes the console)
:: The console is not hidden. It's just minimized.
:: (b) cmd start "" /B (background launch of detached console)
:: This detaches scrcpy from the batch console
:: (c) adb default VBS no-console wrapper (fully hidden window)
:: Default GUI-subsystem scrcpy launch (so no console is created)
:: CreateObject("Wscript.Shell").Run strCommand, 0, False
:: (d) Kleebauer ShowWindow() controller trick to hide the batch console
:: showwin.exe 0 SW_HIDE (Hides the batch console)
:: (e) Powershell ShowWindowAsync (similar idea to Herbert's ShowWindow()
:: Add-Type '[DllImport("user32.dll")]
:: public static extern bool
:: ShowWindowAsync(IntPtr hWnd, int nCmdShow);'
:: Here is the original scrcpy-noconsole.vbs that comes with adb
:: strCommand = "cmd /c scrcpy.exe"
:: For Each Arg In WScript.Arguments
:: strCommand = strCommand & " """ & replace(Arg, """", """""""""") & """"
:: Next
:: CreateObject("Wscript.Shell").Run strCommand, 0, false
:: v1p5 20260613 Added query asking for the LAN IP address of the phone
:: Reordered comments to allow the current version to be obvious
:: v1p4 20260612 minimized the scrcpy console (but it's still there)
:: using cmd /c start "" /min (minimizes the console only)
:: The only known choices are
:: (a) Minimized console-subsystem launch (cmd /c start "" /min)
:: (b) Background detached launch (start "" /B)
:: (c) Hidden GUI-subsystem VBS launcher (no console created)
:: (d) External ShowWindow() console-visibility controller (Kleebauer trick)
:: (e) PowerShell ShowWindowAsync console hider (similar to ShowWindow())
:: v1p3 20260612 moved the pipe outside the FOR command for reliability
:: v1p2 20260611 further reliability improvements added to v1p1
:: Use separate retry counters for pair/connect to avoid loop
:: interference (ATTEMPTS_PAIR, ATTEMPTS_CONN)
:: Added fail-fast with clear error codes and user hints after retry
:: exhaustion
:: Added a detection of the device id after initial connect
:: (handles ephemeral adb ports like 192.168.1.4:54321)
:: Use DEVICE_ID for subsequent -s tcpip command (quoted)
:: to avoid parsing issues with colons
:: Fallback device-id lookup when initial pattern match fails
:: (robust parsing of "adb devices")
:: Consistent quoting of %ADB% and device identifiers to avoid
:: CMD parsing errors
:: v1p1 20260611 reliability improvements added to v1p0
:: Added better device lookup (skip header,ignore blanks,avoid false matches)
:: Added retry logic for adb pair & adb connect (for when phone not ready)
:: Improved polish (consistent quoting, stable scrcpy launch)
:: v1p0 20260611 converted adbconnect.vbs to adbconnect.bat
:: Connects desktop & phone over adb & mirrors phone on the monitor
:: No USB cord is used in this process as it's all done over Wi-Fi
:: Should work even if either the PC and/or the phone is rebooted
:: The script will ask only for the minimum amount of data needed
:: Change the phone static IP address as needed to fit your LAN IP address
@echo off
setlocal enabledelayedexpansion
:: For phones with static IP addresses, change the next line
set PHONE_IP=192.168.1.4
set SCRCPY_OPTS=--keyboard=sdk --always-on-top
echo.
echo === ADB Wireless Auto-Connect ===
echo === [Developer options > Wireless debugging > on] ===
echo.
REM 1. Find adb
for /f "delims=" %%A in ('where adb 2^>nul') do (
if not defined ADB set ADB=%%A
)
if not defined ADB (
echo [ERROR] adb.exe not found.
exit /b
)
REM Ensure .exe extension
if /i not "%ADB:~-4%"==".exe" set ADB=%ADB%.exe
echo Using ADB: "%ADB%"
echo.
REM 2. Check if already connected
echo Checking existing ADB devices...
set DEVICE_ID=
for /f "skip=1 tokens=1" %%I in ('"%ADB%" devices') do (
echo %%I | findstr /R "[0-9]" >nul && (
echo %%I | findstr /I "%PHONE_IP%" >nul && (
if not defined DEVICE_ID set DEVICE_ID=%%I
)
)
)
if defined DEVICE_ID (
echo Already connected on %DEVICE_ID%
goto RUN_TCPIP
)
echo Not connected. Need to pair.
echo.
REM 3. Ask user for pairing info
echo Necessary pairing information will be shown on the phone:
set /p PHONE_IP=Phone IP [%PHONE_IP%] :
set /p PAIR_PORT=Wireless debugging pairing port :
set /p PAIR_CODE=Wireless debugging pairing code :
echo.
echo Pairing with: %PHONE_IP%:%PAIR_PORT%
REM Retry logic for adb pair (3 attempts)
set ATTEMPTS_PAIR=0
:PAIR_RETRY
set /a ATTEMPTS_PAIR+=1
"%ADB%" pair %PHONE_IP%:%PAIR_PORT% %PAIR_CODE%
if errorlevel 1 (
if !ATTEMPTS_PAIR! lss 3 (
echo Pair failed, retrying...
timeout /t 2 >nul
goto PAIR_RETRY
) else (
echo [ERROR] adb pair failed after %ATTEMPTS_PAIR% attempts.
echo Hint: Open Wireless debugging -> "Pair device with pairing code" on the phone, then re-run this script.
exit /b 1
)
)
echo.
:: NEW: Debug port removed in v1p8. Skip directly to TCP/IP mode.
echo Skipping obsolete debug-port connect step...
echo.
:: NEW: After pairing, ADB already trusts the device. Switch directly to TCP/IP.
:: Removed in v1p9
:: echo Switching to TCP/IP 5555...
:: "%ADB%" tcpip 5555
:: Added in v1p9 After pairing, ADB already trusts the device.
:: No tcpip mode is needed.
echo Wireless debugging active. Skipping tcpip 5555 step...
echo.
:: Added this already-connected check in v1p9
:: Check if device is already connected wirelessly
for /f "skip=1 tokens=1" %%I in ('"%ADB%" devices"') do (
echo %%I | findstr /I "%PHONE_IP%" >nul && (
echo Already connected wirelessly on %%I
set DEVICE_ID=%%I
goto RUN_SCRCPY
)
)
echo Connecting final port: %PHONE_IP%:5555
"%ADB%" connect %PHONE_IP%:5555
echo.
set DEVICE_ID=%PHONE_IP%:5555
goto RUN_SCRCPY
:: This secion only applies to USB debugging, not wireless debugging.
:RUN_TCPIP
echo Switching device !DEVICE_ID! to TCP/IP 5555...
"%ADB%" -s "%DEVICE_ID%" tcpip 5555
"%ADB%" connect "%PHONE_IP%:5555"
goto RUN_SCRCPY
:RUN_SCRCPY
echo Launching scrcpy completely silent...
:: NEW: Check if scrcpy is already running to avoid killing visible session
tasklist | findstr /I "scrcpy.exe" >nul
if not errorlevel 1 (
echo scrcpy is already running. Skipping relaunch.
echo Done.
exit /b
)
set "VBS_TEMP=%TEMP%\scrcpy_runner.vbs"
:: Build the standalone VBS command string directly into the temp file
echo strCommand = "cmd /c scrcpy.exe --tcpip=%PHONE_IP% %SCRCPY_OPTS%" > "%VBS_TEMP%"
echo CreateObject("Wscript.Shell").Run strCommand, 0, false >> "%VBS_TEMP%"
:: Execute the temporary VBS script
wscript.exe "%VBS_TEMP%"
:: Brief pause to ensure script allocation completes before cleaning up the temp file
timeout /t 1 >nul
if exist "%VBS_TEMP%" del "%VBS_TEMP%"
echo Done.
exit /b
REM end of adbconnect.bat
--
Usenet is where kind people daily gather to voluntarily help others.
--- Synchronet 3.22a-Linux NewsLink 1.2