netsh wlan show interfaces
В системе 1 интерфейс:
Имя: Беспроводная сеть
Идентификатор GUID:
Физический адрес:
Состояние: Подключено
Тип сети: Инфраструктура
Тип радио: 802.11n
Проверка подлинности: WPA2-Personal
Шифр: CCMP
Режим подключения: Автоматическое подключение
Канал: 7
Скорость приема (Мбит/с): 144
Скорость передачи (Мбит/с): 144
Сигнал: 91%
Профиль : ZyXEL
Состояние размещенной сети: Недоступно
Имя: Беспроводная сеть
Состояние: Подключено
Профиль : ZyXEL
как к этому варианту добавить только :Крепыш сказал(а):В общем получился у меня такой код:
Код:#include <Misc.au3> #include <TrayConstants.au3> Global Const $sTitle = 'Wi-Fi' _Singleton($sTitle, 0) Opt('MustDeclareVars', 1) Opt('TrayOnEventMode', 1) Opt('TrayMenuMode', 3) Opt('TrayAutoPause', 0) Global $sInterface = 'Беспроводная сеть' ; имя подключения Global $bAuto = True TrayItemSetState(TrayCreateItem('Переподключить'), $TRAY_DEFAULT) TrayItemSetOnEvent(-1, '_Reconnect') Global $hAuto = TrayCreateItem('Автоматическое переподключение') If $bAuto Then TrayItemSetState($hAuto, $TRAY_CHECKED) TrayItemSetOnEvent($hAuto, '_Chek') TrayCreateItem('') TrayItemSetOnEvent(TrayCreateItem('Выход'), '_ExitScript') TraySetState() While True Sleep(1000) If Not Ping('192.168.1.1') Then If $bAuto Then Sleep(10000) ; Ждём 10 сек (может подключение само восстановится) If Not Ping('192.168.1.1') Then _Reconnect() EndIf 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 = True TrayItemSetState($hAuto, $TRAY_UNCHECKED) Else $bAuto = False TrayItemSetState($hAuto, $TRAY_CHECKED) EndIf EndFunc Func _ExitScript() Exit EndFunc
Т.к., разрывается соединение с Wi-Fi роутером, то мониторю именно его. Далее, комп должен постоянно находиться онлайн, поэтому переподключаюсь без лишних вопросов.
Вот бы ещё сделать:
1) При запуске скрипта определять имя беспроводного соединения. Пусть берёт имя первого соединения, если их несколько.
2) Определять состояние подключения в момент запуска скрипта. Если подключено, то устанавливать режим автоматического переподключения при обрыве связи, иначе - работать в ручном режиме.
3) Определять IP роутера с тем чтобы пинговать его.
seriousstas сказал(а):как к этому варианту добавить только :
При запуске скрипта определять имя беспроводного соединения. Пусть берёт имя первого соединения, если их несколько?
#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)
Global $bAuto = True
TrayItemSetState(TrayCreateItem('Переподключить'), $TRAY_DEFAULT)
TrayItemSetOnEvent(-1, '_Reconnect')
Global $hAuto = TrayCreateItem('Автоматическое переподключение')
If $bAuto Then TrayItemSetState($hAuto, $TRAY_CHECKED)
TrayItemSetOnEvent($hAuto, '_Chek')
TrayCreateItem('')
TrayItemSetOnEvent(TrayCreateItem('Выход'), '_ExitScript')
TraySetState()
Global $iPID, $sOut, $sInterface, $aResult
While True
If Not $sInterface Then
$iPID = Run(@ComSpec & ' /c netsh wlan show interfaces', '', @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$sOut = ''
ProcessWaitClose($iPID)
Do
$sOut &= StdoutRead($iPID)
Until @error
$aResult = StringRegExp(_Encoding_866To1251($sOut), 'Имя *: *(.+)', 1)
If UBound($aResult) >= 1 Then
$sInterface = $aResult[0]
TraySetToolTip($sInterface)
Else
TraySetToolTip('Беспроводной интерфейс не найден')
EndIf
EndIf
Sleep(1000)
If $sInterface And $bAuto And Not Ping('192.168.1.1') Then
Sleep(10000) ; Ждём 10 сек (может подключение само восстановится)
If Not Ping('192.168.1.1') Then
_Reconnect()
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(10000)
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
Подправил скрипт - будет работать.seriousstas сказал(а):1. Не управляется из трея .
снятие галки ничего не дает - переподключает по кругу..
Да, при отключенном адаптере netsh не находит беспроводной интерфейс. А для его включения нужно указать Имя интерфейса.seriousstas сказал(а):Например запустил скрипт при отключеном адаптере - нужно лезть в диспетчер ..
Возможно у тебя нестабильный инет. Выполни в cmd:seriousstas сказал(а):3 Рвет соединение самопроизвольно , довольно часто , даже если есть и-нет
ping ya.ru -n 1000 -l 1024
Крепыш сказал(а):Подправил скрипт - будет работать.seriousstas сказал(а):1. Не управляется из трея .
снятие галки ничего не дает - переподключает по кругу..
Да, при отключенном адаптере netsh не находит беспроводной интерфейс. А для его включения нужно указать Имя интерфейса.seriousstas сказал(а):Например запустил скрипт при отключеном адаптере - нужно лезть в диспетчер ..
Возможно у тебя нестабильный инет. Выполни в cmd:seriousstas сказал(а):3 Рвет соединение самопроизвольно , довольно часто , даже если есть и-нет
Что говорит?Код:ping ya.ru -n 1000 -l 1024
$connect = _GetNetworkConnect()
If Not $connect Then
$var = Ping("www.google.com",250)
If @error Then
_RunDOS('netsh interface set interface "Беспроводная сеть" DISABLE') ; выкл "Local Area Connection"
Sleep(1000)
_RunDOS('netsh interface set interface "Беспроводная сеть" ENABLE') ; вкл "Local Area Connection"
EndIf
EndIf
Func _GetNetworkConnect()
Local Const $NETWORK_ALIVE_LAN = 0x1 ;net card connection
Local $aRet, $iResult
$aRet = DllCall("sensapi.dll", "int", "IsNetworkAlive", "int*", 0)
If BitAND($aRet[1], $NETWORK_ALIVE_LAN) Then $iResult &= "LAN connected" & @LF
Return $iResult
EndFunc
seriousstas сказал(а):Может её добавить в Твой скрипт ?
Зачем запускать скрипт при выключенном адаптере?seriousstas сказал(а):"Да, при отключенном адаптере netsh не находит беспроводной интерфейс. А для его включения нужно указать Имя интерфейса."
А если брать стандартное имя при отключенном (или в .ini писать ?)
Разрыве какой связи? карПК с интернетом? Тут могут быть 2 причины:seriousstas сказал(а):при разрыве связи - переподключить ,
Передергиваю при обчном старте ПК (в цикле без пинга) ,Крепыш сказал(а):Зачем запускать скрипт при выключенном адаптере?seriousstas сказал(а):"Да, при отключенном адаптере netsh не находит беспроводной интерфейс. А для его включения нужно указать Имя интерфейса."
А если брать стандартное имя при отключенном (или в .ini писать ?)
Разрыве какой связи? карПК с интернетом? Тут могут быть 2 причины:seriousstas сказал(а):при разрыве связи - переподключить ,
1) Разрыв связи карПК с телефоном. Зачем тогда здесь пинговать адрес в интернете?
2) Отсутствие интернета на телефоне. Зачем здесь передёргивать адаптер на карПК?
seriousstas сказал(а):Может сделаешь вариант , чтоб он брал имя из .ini (в которое писать , когда включен), при условии,
что стартует при отключенном адаптере и включал его
#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)
Global $bAuto = True
TrayItemSetState(TrayCreateItem('Переподключить'), $TRAY_DEFAULT)
TrayItemSetOnEvent(-1, '_Reconnect')
Global $hAuto = TrayCreateItem('Автоматическое переподключение')
If $bAuto Then TrayItemSetState($hAuto, $TRAY_CHECKED)
TrayItemSetOnEvent($hAuto, '_Chek')
TrayCreateItem('')
TrayItemSetOnEvent(TrayCreateItem('Выход'), '_ExitScript')
TraySetState()
Global $iPID, $sOut, $sInterface, $aResult, $bGet
Global $sIniFile = @ScriptDir & "\Wi-Fi.ini", $hFile
While True
If Not $sInterface Then
$iPID = Run('netsh.exe wlan show interfaces', '', @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$sOut = ''
ProcessWaitClose($iPID)
Do
$sOut &= StdoutRead($iPID)
Until @error
$aResult = StringRegExp(_Encoding_866To1251($sOut), '(Имя|Name) *: *(.+) *', 1)
If UBound($aResult) >= 2 Then
$sInterface = $aResult[1]
$hFile = FileOpen($sIniFile, 2+512)
FileWrite($hFile, $sInterface)
FileClose($hFile)
TraySetToolTip($sInterface)
ElseIf Not $bGet Then
$sInterface = FileRead($sIniFile)
If $sInterface Then
TraySetToolTip($sInterface)
Else
TraySetToolTip('Беспроводной интерфейс не найден')
EndIf
$bGet = True
EndIf
EndIf
Sleep(1000)
If $sInterface And $bAuto And Not Ping('192.168.1.1') Then
Sleep(10000) ; Ждём 10 сек (может подключение само восстановится)
If Not Ping('192.168.1.1') Then
TrayTip($sTitle, 'Переподключение', 5)
_Reconnect()
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(16008)
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
Чего? Скрипт сам не ищет соединение. Задумка в том, что в в свойствах сети стоит галка "Подключаться автоматически". Но если пропало соединение с роутером и не восстанавливается, то помогает только перезапуск адаптера. Скрипт и выполняет эту функцию.seriousstas сказал(а):ну и что-б только искал соединение (с точкой доступа) , а не и-нет ..
про "чего" - при перезапуске (в цикле) адаптера и происходит поиск последнего соединения автоматом .Чего? Скрипт сам не ищет соединение. Задумка в том, что в в свойствах сети стоит галка "Подключаться автоматически". Но если пропало соединение с роутером и не восстанавливается, то помогает только перезапуск адаптера. Скрипт и выполняет эту функцию.seriousstas сказал(а):ну и что-б только искал соединение (с точкой доступа) , а не и-нет ..
Не обратил внимания, что у тебя английская винда. В английской для поиска имени сети в команде netsh нужно соответственно использовать вместо "Имя" английское слово ("Name" или какое там...)
seriousstas сказал(а):но названия - это важно есть енгл. винда
seriousstas сказал(а):Win стоит везде Рус. две 8.1 и одна 10-ка
Когда SSID сети скрыта, то ноут часто теряет связь с роутером и иногда восстановить соединение не удаётся даже вручную кнопкой "Подключить". Помогает только перезапуск адаптера.seriousstas сказал(а):А про разрывы связы - не сталкиваюсь с таким - мож лет 5-ть назад - древние свистки , кривые дрова,
сейчас такого нет .
И поищи на енг ресурсах есть примеры восстановления соединения без перезапуска адаптера ..
seriousstas сказал(а):Вот через такую проверку все работает
и соединяет при разрыве :
Код:$connect = _GetNetworkConnect() If Not $connect Then $var = Ping("www.google.com",250) If @error Then _RunDOS('netsh interface set interface "Беспроводная сеть" DISABLE') ; выкл "Local Area Connection" Sleep(1000) _RunDOS('netsh interface set interface "Беспроводная сеть" ENABLE') ; вкл "Local Area Connection" EndIf EndIf Func _GetNetworkConnect() Local Const $NETWORK_ALIVE_LAN = 0x1 ;net card connection Local $aRet, $iResult $aRet = DllCall("sensapi.dll", "int", "IsNetworkAlive", "int*", 0) If BitAND($aRet[1], $NETWORK_ALIVE_LAN) Then $iResult &= "LAN connected" & @LF Return $iResult EndFunc
Ну и в цикл его ..
... не могу найти ,как тут в теги заключать (более "неудобного" форума не встречал ))) ,
нашел)
Про "неудобный форум" .. пользовался с залоченной его браузером оболочкой , включил и всёКрепыш сказал(а):seriousstas сказал(а):но названия - это важно есть енгл. виндаseriousstas сказал(а):Win стоит везде Рус. две 8.1 и одна 10-ка
Func ResumeSuspend()
;_RadioUpd()
_restfoob()
_StartIcarDS()
;_restwifi()
EndFunc