#NoTrayIcon
#include <Misc.au3>
#include <TrayConstants.au3>
#include <AutoItConstants.au3>
#include <Encoding.au3>
Global Const $sTitle = 'Wi-Fi'
_Singleton($sTitle, 0)
Opt('MustDeclareVars', 1)
Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 3)
Opt('TrayAutoPause', 0)
TrayItemSetState(TrayCreateItem('Переподключить'), $TRAY_DEFAULT)
TrayItemSetOnEvent(-1, '_Reconnect')
Global $hAuto = TrayCreateItem('Автоматическое переподключение')
TrayItemSetOnEvent($hAuto, '_Chek')
TrayCreateItem('')
TrayItemSetOnEvent(TrayCreateItem('Выход'), '_ExitScript')
TraySetState()
Global $sInterface, $sStatus, $sProfile, $sIP, $bAuto = True
Global $iPID, $sOut, $array
While True
If Not $sInterface Or $sStatus <> 'Подключено' Then
$sOut = ''
$iPID = Run('netsh wlan show interfaces', '', @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While True
$sOut &= StdoutRead($iPID)
If @error Then ExitLoop
WEnd
$array = StringRegExp(_Encoding_866To1251($sOut), 'Имя:\s+(.+)(?s).+?Состояние:\s+(?-s)(.+)(?s).+?(?:Профиль\s*)?:\s+(?-s)(.+)', 1)
If Not $sInterface And UBound($array) >= 1 Then
$sInterface = $array[0]
Else
TraySetToolTip('Беспроводной интерфейс не найден')
EndIf
If UBound($array) >= 2 Then $sStatus = $array[1]
If $sStatus == 'Подключено' Then
If UBound($array) >= 3 Then $sProfile = $array[2]
If $bAuto Then TrayItemSetState($hAuto, $TRAY_CHECKED)
$sIP = '192.168.1.1' ; Тут надо бы определить IP-адрес роутера
TraySetToolTip($sInterface & @CRLF & 'Подключено' & @CRLF & $sProfile)
ElseIf $sInterface Then
TraySetToolTip($sInterface & @CRLF & 'Отключено')
EndIf
EndIf
Sleep(1000)
If $sIP Then
If Not Ping($sIP) Then
TraySetToolTip($sInterface & @CRLF & 'Отключено')
$sStatus = ''
$sProfile = ''
If BitAND(TrayItemGetState($hAuto), $TRAY_CHECKED) Then
Sleep(5000)
TrayTip($sTitle, 'Wi-Fi соединение отсутствует', 5, 2)
Sleep(5000)
If Not Ping($sIP) Then
TrayTip($sTitle, 'Переподключение', 5)
_Reconnect()
EndIf
EndIf
Else
TraySetToolTip($sInterface & @CRLF & 'Подключено' & @CRLF & $sProfile)
EndIf
EndIf
Wend
Func _Reconnect()
RunWait('netsh.exe interface set interface "' & $sInterface & '" disable', '', @SW_HIDE)
Sleep(200)
RunWait('netsh.exe interface set interface "' & $sInterface & '" enable', '', @SW_HIDE)
Sleep(5000)
EndFunc
Func _Chek()
If BitAND(TrayItemGetState($hAuto), $TRAY_CHECKED) Then
$bAuto = False
TrayItemSetState($hAuto, $TRAY_UNCHECKED)
Else
$bAuto = True
TrayItemSetState($hAuto, $TRAY_CHECKED)
EndIf
EndFunc
Func _ExitScript()
Exit
EndFunc