############################################################################################################# # 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)