Что нового

Изменение настроек подключений по локальной сети.

an99dre

Новичок
Сообщения
7
Репутация
0
Необходимо выполнить следующую задачу:
в окне "Сетевые подключения" выделить и открыть окно "Подключение по локальной сети" или "Подключение по локальной сети 2".
Параметры обоих окон одинаковы:
Class:SysListView32
Instance:1
ClassnameNN:SysListView321
Name:
Advanced (Class):[CLASS:SysListView32; INSTANCE:1]
ID:1
или сразу открыть необходимое окно, без открытия окна "Сетевые подключения".
Конечная цель отключение проверки подлинности IEEE 802.1X
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Вот тут посмотрите.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
an99dre
У Вас система какая? Я у себя в Windows XP ни на ноутбуке, ни на стационарном компьютере такого параметра не нашел.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
madmasles сказал(а):
У Вас система какая? Я у себя в Windows XP ни на ноутбуке, ни на стационарном компьютере такого параметра не нашел.
Это для Wi-Fi. Стандарт IEEE 802.1x определяет протокол контроля доступа и аутентификации.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Garrett
У дочки в ноутбуке поковыряюсь, у нее есть Wi-Fi. Должна эта информация где-то в реестре быть.
 
Автор
A

an99dre

Новичок
Сообщения
7
Репутация
0
madmasles сказал(а):
an99dre
У Вас система какая? Я у себя в Windows XP ни на ноутбуке, ни на стационарном компьютере такого параметра не нашел.
XP, MB Asus P5K Premium, свойства сетевого подключения, проверка подлинности. Встроенные сетевые адаптеры (проводные)

Garrett сказал(а):
Это включение/выключение wi-fi адаптера, а у меня изменение настроек сетевого адаптера, чувствуете разницу.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
an99dre сказал(а):
Это включение/выключение wi-fi адаптера, а у меня изменение настроек сетевого адаптера, чувствуете разницу.
Без сарказма, пожалуйста.
 
Автор
A

an99dre

Новичок
Сообщения
7
Репутация
0
Yashied сказал(а):
an99dre сказал(а):
Это включение/выключение wi-fi адаптера, а у меня изменение настроек сетевого адаптера, чувствуете разницу.
Без сарказма, пожалуйста.
Извиняюсь если прозвучало резко, просто я задавал вопрос про "Фому", а получил совет про "Ерёму", перед тем как задать вопрос я достаточно тщательно облазил и этот форум, и озон, и ру-боард. Хотелось бы получить действительно дельный совет.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
an99dre
Ну нет у меня вкладки Проверка подлинности. :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
OffTopic:
an99dre [?]
Может какие сервисы отключены?
Может быть, сейчас не помню. Похоже, пришло время переустанавливать систему.
PS
Хотя вряд ли я на 4-х компьютерах одни и те же службы отключил.
 
Автор
A

an99dre

Новичок
Сообщения
7
Репутация
0
Задачу можно видоизменить: как найти, установить фокус, кликнуть правой кнопкой мышки и вызвать меню "Cвойства" "Подключение по локальной сети"
Начало такое:
Opt("WinTitleMatchMode", 4)
ControlClick("classname=Shell_TrayWnd","Область уведомлений","Button1")
send("а")
send("е")
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
У меня получилось только так. Я создал ярлык для соединения - Network Properties.lnk, и положил его на Desktop. А дальше все просто (только у меня английская Windows).

Код:
#Include <GUIListView.au3>

$hWnd = ControlGetHandle('Program Manager', '', 'SysListView321')
$Index = _GUICtrlListView_FindText($hWnd, 'Network Properties')
_GUICtrlListView_ClickItem($hWnd, $Index, 'Left', 0, 2)
If Not WinWait('Wireless Network Connection Status', '', 3) Then
	Exit
EndIf
ControlClick('Wireless Network Connection Status', '', '[CLASS:Button;INSTANCE:3]')
WinClose('Wireless Network Connection Status')
If Not WinWait('Wireless Network Connection Properties', '', 3) Then
	Exit
EndIf

...


 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Вот мой вариант.
Конечно, может это и грубый пример, но он работает.
По аналогии, можно посмотреть свои значения в реестре и подставить их в пример, если они у вас другие.
Код:
#include <Constants.au3>
Global $val_on = "0x0500000000000000000000c00d0000002000000011223311223311223311223311223311223311223311223311223311223311220d000000280000000000000028000000050000000000000000000000000000000000000000000000000000000000000000000000"
Global $val_off = "0x0500000000000000000000400d0000002000000011223311223311223311223311223311223311223311223311223311223311220d000000280000000000000028000000050000000000000000000000000000000000000000000000000000000000000000000000"

_IEEE_802_1x()

Func _IEEE_802_1x()
	
	$switch = RegRead ( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EAPOL\Parameters\Interfaces\{E965C757-E243-498E-91BB-F25E479B8958}", "1" )

	If BinaryMid($switch, 12, 1) = "0x40" Then
		RegWrite ( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EAPOL\Parameters\Interfaces\{E965C757-E243-498E-91BB-F25E479B8958}", "1", "REG_BINARY", $val_on )
			MsgBox(0,"Внимание!","Проверка подлинности IEEE 802.1x включена!")
	ElseIf BinaryMid($switch, 12, 1) = "0xC0" Then
		RegWrite ( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EAPOL\Parameters\Interfaces\{E965C757-E243-498E-91BB-F25E479B8958}", "1", "REG_BINARY", $val_off )
			MsgBox(0,"Внимание!","Проверка подлинности IEEE 802.1x выключена!")
	EndIf

EndFunc
 
Автор
A

an99dre

Новичок
Сообщения
7
Репутация
0
Спасибо за участие
Yashied сказал(а):
У меня получилось только так.
, но повторюсь соединение ПРОВОДНОЕ, буду пробовать прикрутить для своих нужд, только в программировании я :'(

Garrett сказал(а):
Вот мой вариант.
Конечно, может это и грубый пример, но он работает.
По аналогии, можно посмотреть свои значения в реестре и подставить их в пример, если они у вас другие.
В том то и дело, что {E965C757-E243-498E-91BB-F25E479B8958} у каждого индивидуальный (в смысле раздел будет каждый раз разный), а нужен "твик" для изменения. И потом при вкл/откл данной функции изменений в ветке "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EAPOL\Parameters\Interfaces нет, и вообще мониторинг реестра ничего не даёт, изменений нет. Интересно где хранятся эти изменения?
P.S. Проверил, даже при подстановке "своего" раздела скрипт ничего не делает.

P.P.S.
Методом проб и ошибок (попросту методом "тыка") получилось следующее:
Код:
Opt("WinTitleMatchMode", 4)
ControlClick("classname=Shell_TrayWnd","Область уведомлений","Button1") 
send("а")
send("е")
send("Подключение")
send("^m")
WinWait("Подключение по локальной сети - свойства")
$Tabhdl = ControlGetHandle("Подключение по локальной сети - свойства","Подключение через:","SysTabControl321")
ControlCommand("","",$Tabhdl,"TabRight","")
WinWait("Подключение по локальной сети - свойства")
ControlCommand("Подключение по локальной сети - свойства","","Button1","UnCheck","")
ControlClick("Подключение по локальной сети - свойства","","Button6")
Не получается отличить "Подключение по локальной сети" и "Подключение по локальной сети 2"
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
an99dre [?]
И потом при вкл/откл данной функции изменений в ветке "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EAPOL\Parameters\Interfaces нет, и вообще мониторинг реестра ничего не даёт, изменений нет.
После установки флажка, кнопку Ok нажимали? Чтобы увидеть изменения в реестре, нужно ветку закрыть а потом снова открыть.
Вот специально сделал скрины на скорую руку:
 
Автор
A

an99dre

Новичок
Сообщения
7
Репутация
0
Garrett сказал(а):
После установки флажка, кнопку Ok нажимали? Чтобы увидеть изменения в реестре, нужно ветку закрыть а потом снова открыть.
Вот специально сделал скрины на скорую руку:
Да уж конечно, что-то у Вас пишет в этот раздел другое. Я же говорю, пытался отслеживать реестр, не помогло.

P.S. Решено с помощью madmasles, за что ему ОГРОМНОЕ СПАСИБО
Код:
#include <GuiListView.au3>

;Run("control ncpa.cpl")
ShellExecute("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}")
WinWaitActive("Сетевые подключения")
WinSetState("Сетевые подключения", "", @SW_MINIMIZE)
$hListView = ControlGetHandle("Сетевые подключения", "", "[CLASS:SysListView32; INSTANCE:1]")
$col = _GUICtrlListView_GetItemCount($hListView)

For $i = 0 To $col - 1
    $name = _GUICtrlListView_GetItemText($hListView, $i)
    If StringInStr($name, "Подключение по локальной сети") <> 0 Then
        _NetConnection_Verb($name, "Сво&йства")
        While 1
            $Tabhdl = ControlGetHandle("","Подключение","SysTabControl321") 
            ControlCommand("","",$Tabhdl,"TabRight","") 
            WinWait("","Проверка подлинности") 
            ControlCommand("","Проверка подлинности","Button1","UnCheck","") 
            ControlClick("","Проверка подлинности","Button6") 
            WinClose("","Проверка подлинности")
            Sleep(1000)
            ExitLoop
        WEnd
    EndIf
Next
WinClose("Сетевые подключения")

Func _NetConnection_Verb($sConnectionName, $sVerb)
    ;   Local $sFolderName = "Network Connections"
    Local $sFolderName = "Сетевые подключения"
    Local $oNetConnections, $oConnection
    Local $oShellApp = ObjCreate("Shell.Application")
    Local $oControlPanel = $oShellApp.Namespace(3)
    For $oFolderItem In $oControlPanel.Items
        If $oFolderItem.Name = $sFolderName Then
            $oNetConnections = $oFolderItem.GetFolder
            ExitLoop
        EndIf
    Next
    If Not (IsObj($oNetConnections)) Then Return SetError(1, 0, False)
    For $oFolderItem In $oNetConnections.Items
        If StringInStr($oFolderItem.Name, $sConnectionName) Then
            $oConnection = $oFolderItem
            ExitLoop
        EndIf
    Next
    If Not (IsObj($oConnection)) Then Return SetError(2, 0, False)
    $oConnection.InvokeVerb($sVerb)
    Sleep(1000)
EndFunc   ;==>_NetConnection_Verb
 

frazier1979

Новичок
Сообщения
8
Репутация
0
Большое спасибо madmasles- у и an99dre

Однако остался небольшой вопрос
Если данный скрипт запускаешь из под пользователя, который залогинен в систему и имеет права администратора - все нормально. Скрипт отрабатывает.
Однако, если его запускать из под пользователя который не имеет права администратора - он не отрабатывает. Появляются сообщения об ошибках, при открыткии свойств сетевого интерфейса и попытки их изменения:
1)
"Некторые элементы управления на этой странице свойств отключены, поскольку вы не имеете достаточных привелегий для доступа к ним или их изменения"
2)
Изменения в параметрах проверки подлинности не сохранены

Если же запустить скрипт от имени другой учетной записи, имеющей права администратора, но не залогиненой в систему (runas) то он также не отрабатывает, не открывается панель управления, и не выполняются все последующие операции.

Как бы сделать таким образом, чтобы данный скрипт можно было запускать от другой учетной записи, например для распространения его через MS SCCM на множество ПК?
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
657
Попробуй-те добавить в самое начало скрипта следующее:
Код:
#RequireAdmin
 

frazier1979

Новичок
Сообщения
8
Репутация
0
Попробовал.

Запускает окно проводника с открытым диском С:\

функция #RequireAdmin требует перед запуском ввести пароль администратора, что не подходит в случае, когда скрипт распространяется на много ПК средствами централизованного управвления (типа MS SCCM)

Некоторая дополнительная информация:

Если из под пользователя, не имеющего административных привелегий выполнить следующий код

Код:
Run("Control")


То откроется панель управления.

Если из под пользователя, не имеющего административных привелений выполнить следующий код


Код:
#RequireAdmin

Run("Control")


Сначала появиться запрос на ввод имени пользователя и пароля. После ввода имени пользователя, обладающего правами администратора и соответствующего пароля - ничего не происходит, панель управления не появляется.

Тот же эффект проявляется если выполнить следующие действия:
1) Из под учетной записи пользователя, не обладающего правами администратора:
Пуск -> Выполнить->cmd. В командной строке вводим control, нажимаем Enter.
Результат: появляется окно - "Панель управления"
1) Из под учетной записи пользователя, не обладающего правами администратора:
Пуск -> Выполнить->cmd. В командной строке вводим runas /user:admin cmd, нажимаем Enter. Вводим пароль для учетной записи admin, которая обладает правами администратора. Появляется окно cmd, запущенное с правами администратора, в этом окне вводим control, нажимаем Enter.
Результат - окно "Панель управления" - не открывается. Интерактивные сообщения об ошибках не появляются.

Следоваетльно, вопрос сводиться к тому, как интерактивно запустить окно "Панель управления" с правами администратора.

Если пользоваться интерфейсом и выполнять действия вручную, есть следующий выход:

Запустить InternetExplorer c с правами учетки, имеющей аминистративные привелегии, выбрать меню "Файл", выбрать подменю - "Открыть". В появившемся окне "Открыть" - нажать кнопку "Обзор". В появившемся окне "Microsoft Internet Explorer", в левой части окна, выбрать объект "Мой компьютер". В правой чести окна "Microsoft Internet Explorer" выбрать один из локальный дисков (например С:\) нажать на нем правой кнопкой, и в появившемся меню выбрать пункт - "Проводник". В левой части появившегося окна "Проводник" будет область "Папки", где в списке будет присутствовать ссылка на "Панель управления", если ее выбрать - запуститься Панель управления с правами администратора.

Другого способа вызвать панель управления с правами администратора из под учетной записи пользователя, не обладающей правами администратора, я, к сожалению, не знаю.

Итак вопрос:
Как в скрипте, автоматом вызвать панель управленя с правами администратора, при условии, что скрипт запускается из под пользователя, не обладающего правами администратора?

У кого какие мысли?
 
Верх