CCCPaste

wifi auto on-connect script (for windows wifi...

#############################################################################################################
# AUTORUN WIFI CONNECT when disconnected IMMEDIATELY after disconnect, and every 30 seconds thereafter.
# This project is used (for me personally) for RDP access on a LAN PC RIG. Using this script, i can make sure
# my wifi will always be attempting to reconnected immediately and fast without connection issues.
# Works great... but adaptor, if it gets disabled will NOT re-enable. Couldn't get it to do that. oh well...
# just don't disable the adaptor and life is good :)
# SCRIPT #1/2
# SCRIPT #1 = Python Script, Main script, this one... below.
# SCRIPT #2 = Windows Batch script, +ADMIN-Privelages + Execute script on boot
# (link to script #2) https://pastebin.com/7NuczV3p

#TUTORIAL:
# INSTALL PYTHON, add to PATH (environment path in windows)
# save script to pc, where you save it, will be needed for script 2 to locate script to autorun... .bat ;)
#############################################################################################################
##################################################SCRIPT 1###################################################
#############################################################################################################
#Auto-Run-Wifi-Connect#
# ARWC.py SOURCE

import sys
import os
import subprocess
import time
import logging
import ctypes

# --------------- CONFIG -----------------
WIFI_SSID = "USP3,951,134"
ADAPTER_NAME = "Wi-Fi 4" #CHANGE TO YOUR ADAPTOR NAME VIA, (WINkey + R) run: ncpa.cpl (find connected adaptor)
CHECK_INTERVAL = 1
RETRY_INTERVAL = 5
ADAPTER_ENABLE_WAIT = 15  # seconds to wait for WLAN radio after enabling
CONNECT_RETRIES = 3
LOG_FILE = os.path.join(os.path.dirname(__file__), "WiFi_AutoReconnect.log")

# --------------- LOGGING ----------------
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    handlers=[logging.StreamHandler(sys.stdout),
              logging.FileHandler(LOG_FILE, encoding="utf-8")]
)

# --------------- ADMIN ------------------
def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

if not is_admin():
    logging.info("Relaunching script as admin...")
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    sys.exit(0)

# --------------- HELPERS ----------------
def adapter_exists(adapter_name):
    try:
        result = subprocess.run(["netsh", "interface", "show", "interface"], capture_output=True, text=True)
        return adapter_name in result.stdout
    except:
        return False

def is_adapter_enabled(adapter_name):
    try:
        result = subprocess.run(["netsh", "interface", "show", "interface", adapter_name], capture_output=True, text=True)
        return "Enabled" in result.stdout
    except:
        return False

def enable_adapter(adapter_name):
    """Enable adapter and wait for WLAN radio to be powered"""
    try:
        subprocess.run(["netsh", "interface", "set", "interface", adapter_name, "enable"], check=True)
        logging.info(f"Adapter '{adapter_name}' enable command sent. Waiting for WLAN radio...")
        start_time = time.time()
        while time.time() - start_time < ADAPTER_ENABLE_WAIT:
            try:
                wlan_status = subprocess.run(["netsh", "wlan", "show", "interfaces"], capture_output=True, text=True)
                output = wlan_status.stdout.lower()
                # Check if adapter exists in WLAN interfaces and is not powered down
                if ADAPTER_NAME.lower() in output and "powered down" not in output:
                    logging.info(f"Adapter '{adapter_name}' is fully initialized.")
                    return True
            except:
                pass
            time.sleep(1)
        logging.warning(f"Adapter '{adapter_name}' did not become ready in {ADAPTER_ENABLE_WAIT}s.")
        return False
    except subprocess.CalledProcessError as e:
        logging.warning(f"Could not enable adapter via netsh: {e}")
        return False

def is_connected(ssid):
    try:
        result = subprocess.run(["netsh", "wlan", "show", "interfaces"], capture_output=True, text=True)
        output = result.stdout.lower()
        return ssid.lower() in output and "connected" in output
    except:
        return False

def connect_wifi(ssid):
    """Retry Wi-Fi connection after adapter is ready"""
    for attempt in range(1, CONNECT_RETRIES + 1):
        if not is_adapter_enabled(ADAPTER_NAME):
            logging.info(f"Adapter '{ADAPTER_NAME}' not ready. Waiting 1s...")
            time.sleep(1)
            continue
        try:
            time.sleep(2)  # delay slightly after adapter ready
            subprocess.run(["netsh", "wlan", "connect", f"name={ssid}"], check=True)
            logging.info(f"Attempt {attempt}: Connecting to '{ssid}'...")
            time.sleep(RETRY_INTERVAL)
            if is_connected(ssid):
                logging.info(f"Successfully connected to '{ssid}'.")
                return True
        except subprocess.CalledProcessError as e:
            logging.warning(f"Attempt {attempt}: Connection failed: {e}")
        time.sleep(1)
    logging.error(f"Failed to connect to '{ssid}' after {CONNECT_RETRIES} attempts.")
    return False

# --------------- MAIN LOOP -------------
logging.info("Wi-Fi AutoReconnect started (visible window)")

last_adapter_enabled = None
last_connected = None

while True:
    try:
        if not adapter_exists(ADAPTER_NAME):
            logging.error(f"Adapter '{ADAPTER_NAME}' not found.")
            time.sleep(RETRY_INTERVAL)
            continue

        adapter_enabled = is_adapter_enabled(ADAPTER_NAME)
        if adapter_enabled != last_adapter_enabled:
            last_adapter_enabled = adapter_enabled
            if adapter_enabled:
                logging.info(f"Adapter '{ADAPTER_NAME}' is enabled.")
            else:
                logging.warning(f"Adapter '{ADAPTER_NAME}' is disabled. Enabling...")
                if not enable_adapter(ADAPTER_NAME):
                    logging.warning(f"Please manually enable '{ADAPTER_NAME}' and press Enter to continue...")
                    input()
                    continue

        connected = is_connected(WIFI_SSID)
        if connected != last_connected:
            last_connected = connected
            if connected:
                logging.info(f"Wi-Fi '{WIFI_SSID}' is connected.")
            else:
                logging.warning(f"Wi-Fi '{WIFI_SSID}' disconnected. Attempting reconnect...")
                connect_wifi(WIFI_SSID)

        time.sleep(CHECK_INTERVAL)

    except KeyboardInterrupt:
        logging.info("Stopping script.")
        break
    except Exception as e:
        logging.error(f"Unexpected error: {e}")
        time.sleep(RETRY_INTERVAL)