Как программно отключить сетевую плату в Диспетчере устройст

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Как программно отключить сетевую плату в Диспетчере устройст

Сообщение Vova_2581 » 19.12.2012 (Ср) 20:31

Суть проблемы в том, чтобы ограничить доступ к интернету особо дорвавшихся. Знаю, что это примитивно, но возникла такая простая идея, только не знаю как реализовать это программно. Может как-то через WMI или API?

Только не пишите, что это все не годится и для таких случаев нужно использовать имплементарно-сублимационный квадво-алгоритм Гаусса (читать, как бред...). Мне нужен максимально простой способ, для малолетнего хацкера, который не поймет, как и что... и куда нужно влезть, что бы все снова заработало. Просто напишите, как можно отключить... если знаете.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение jangle » 19.12.2012 (Ср) 20:43

Интернет совсем надо отключить? Не проще ли выдернуть кабель из сетевухи

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Vova_2581 » 19.12.2012 (Ср) 20:53

:))))) Не... Ну, он же не настолько тупой, чтобы не проверить кабель и не вставить обратно. :lol:

Тут нужна хитрость... :wink:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Хакер » 20.12.2012 (Чт) 1:40

Зачем изобретать велосипед?
Всё уже давно изобретено.

Учётка ограничивающего должна быть админской, учетка ограничиваемого — не админской.
Админ просто жмёт «Отключить»:
nwif_admin_can_do_down.png
nwif_admin_can_do_down.png (8.29 Кб) Просмотров: 7475


Не-админ не может сделать обратное действие:
nwif_not_admin_cannot_do_up.png
nwif_not_admin_cannot_do_up.png (8.36 Кб) Просмотров: 7475
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 20.12.2012 (Чт) 12:27

Ну вообще судя по вопросу и теме посвященной программированию на VB моя телепатия подсказывает, что автору нужен программный метод воздействия, а не в ручную.
Если так, то вот примерный код
Код: Выделить всё
Private Function IsConnect(ByVal strName As String) As Boolean
   
    On Error GoTo M1
   
    Dim objshell As New Shell
    Dim objItems As Shell32.FolderItems
    Dim objItem As Shell32.FolderItem
    Dim objConnections As Shell32.FolderItems
    Dim objVerbs As Shell32.FolderItemVerbs
    Dim objVerb As FolderItemVerb
       
    If PPPoE_PC Then 'Обработка только если соединение PPPoE через компьютер
        Set objItems = objshell.NameSpace(ssfCONTROLS).Items
        '------- Блок 1 ------- (Получение папки "Cетевые подключения")
        For Each objItem In objItems
            Select Case UCase(objItem.Name)
                Case UCase("Сетевые подключения"), UCase("Network Connections")
                Set objConnections = objItem.GetFolder.Items()
                Exit For
            End Select
        Next objItem
        Set objItems = Nothing
        '------- Блок 2 ------- (Получение сетевого подключения с нужным именем)
        If Not (objConnections Is Nothing) Then 'Если объектная переменная не пуста
            For Each objItem In objConnections
                Select Case UCase(objItem.Name)
                    Case UCase(strName)
                    Set objVerbs = objItem.Verbs()
                    Exit For
                End Select
            Next objItem
            '------- Блок 3 ------- (Получение списка возможных действий с подключением)
            If Not (objVerbs Is Nothing) Then   'Если объектная переменная не пуста
                For Each objVerb In objVerbs
                    Select Case objVerb.Name
                        Case "En&able", "&Подключить", "&Разрешить"
                            IsConnect = False
                            Exit For
                        Case "Disa&ble", "&Отключить", "&Запретить"
                            IsConnect = True
                            Exit For
                    End Select
                Next objVerb
            End If
        End If
    End If
    Set objVerbs = Nothing: Set objVerb = Nothing
    Set objItems = Nothing: Set objItem = Nothing
    Set objConnections = Nothing: Set objshell = Nothing
    Exit Function
M1:
    SaveLog G_strLogFile, "Fun IsConnect. Err № " & Err.Number, True
    Resume Next
End Function

Писать заново было лень, поэтому просто выдрал готовую функцию из проекта и поместил как есть. Сам принцип такой сначала получаем ссылку на конкретное сетевое подключение и далее нужно исследовать его глаголы (verbs). Таким образом можно выявить состояние соединения и взаимодействуя с глаголами выполнить нужное действие.
Если просто нужно ограничить сетевой доступ, то можно и как мне кажется даже лучше изменять таблицу маршрутизации. Ну и куча других метод конечно есть, в т.ч. и применение политик.
Бороться и искать, найти и перепрятать

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Vova_2581 » 21.12.2012 (Пт) 18:34

ger_kar
Так это же тоже самое, что предложил Хакер только не совсем рабочий код.
Ваш код не выполняет никаких действий, а всего лишь возвращает статус: «Подключено» или «Отключено» указанное сетевое соединение вот здесь...
Код: Выделить всё
...
    Case "En&able", "&Подключить", "&Разрешить"
     IsConnect = False
    Exit For
    Case "Disa&ble", "&Отключить", "&Запретить"
    IsConnect = True
...

и все!

Может быть меня снова неправильно поняли (заранее извиняюсь), но имел ввиду вот это отключение...
Изображение
То есть сетевую плату, как устройство.
Простой «разрыв» соединения, как Вы предлагаете, не решит проблему (легко снова все включить, без проблем). Говорю же: нужна хитрость. :wink:

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Sam777e » 22.12.2012 (Сб) 0:44

Может быть это вам подойдет.
Не помню терминов, но, припоминается, что можно сделать несколько профилей оборудования [ с паролями ] и при загрузке выбирать нужный - ну, и дать ему пароль от профиля без сетевой карты.
Здоровья и удачи

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Хакер » 22.12.2012 (Сб) 7:18

Vova_2581 писал(а):Простой «разрыв» соединения, как Вы предлагаете, не решит проблему (легко снова все включить, без проблем). Говорю же: нужна хитрость. :wink:

Да с чего ради легко? Если ограничивающий пользователь — админ, а ограничиваемый — не админ, то ограничиваемый в жизни ничего не включит обратно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 22.12.2012 (Сб) 11:12

Ну чуть хитрее чем просто разрыв сетевого соединения - подправить таблицу маршрутизации. Как править зависит от того, что собственно, что нужно ограничить. Если например просто выход в интернет убрать, достаточно изменить/удалить шлюз по умолчанию или добавить левые постоянные маршруты.
Последний раз редактировалось ger_kar 23.12.2012 (Вс) 6:14, всего редактировалось 1 раз.
Бороться и искать, найти и перепрятать

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Vova_2581 » 22.12.2012 (Сб) 21:02

Sam777e
Ну, это как вариант... хотя предложение интересное, оставим на крайний случай.

Хакер
Согласен, что с админом не поспоришь, но это не совсем удобно, хотя тоже как вариант на крайний случай.

Понимаете, если я все начну делать вручную, это будет слишком явно, начнутся уговоры, просьбы и мольбы типа: «ну, еще чуть-чуть... еще капельку...» и т.д. А у меня задумка сделать автомат типа: инет есть, например, с 9-ти до 12-ти, потом отключение до 18-ти и так далее.

ger_kar
Только истинный Гуру знает, как править таблицу маршрутизации! :wink: Для меня же, как для салаги, – это темный лес. Разве, что будет какой-нибудь пример кода, чтобы разобраться хотя бы поверхностно.

А что просто отключить устройство программно никак нельзя? Порылся в инете, нашел WMI класс Win32_NetworkAdapter и не рабочий пример:
Код: Выделить всё
Set sobj = GetObject("WinMgmts:").InstancesOf("Win32_NetworkAdapter")
For Each Instance In sobj
   Instance.Disable
Next

Хотя в MSDN написано про Disable, но в действительности такого метода нет. :?
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa390364(v=vs.85).aspx
Это как понимать? Или я что-то не так делаю?

Может быть как-то использовать функцию энергосбережения SetPowerState?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Хакер » 22.12.2012 (Сб) 21:46

Vova_2581 писал(а):Согласен, что с админом не поспоришь, но это не совсем удобно, хотя тоже как вариант на крайний случай.

Это вообще-то самый правильный путь, предусмотренный Microsoft.
Причём тут ручной способ — я ума не приложу. Ты можешь заходить под админом удалённо и делать «Включиь»/«Отключить». Ты можешь сделать это по расписанию. Важно что ребёнок, которые не является админом, не сможет на это повлять.

Vova_2581 писал(а):Только истинный Гуру знает, как править таблицу маршрутизации!

Запусти cmd и введи route /?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Vova_2581 » 23.12.2012 (Вс) 1:04

Что-то пока не могу понять, как удалить указанный шлюз.
Делаю так...
Набираю команду ipconfig /all и получаю список адресов протокола PPP.
Нахожу адрес основного шлюза, к примеру, у меня: 157.20.14.17
Выполняю команду...
route delete 157.20.14.17 mask 255.255.0.0
Получаю...
«Не найден указанный маршрут»
И в чем прикол?

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Sam777e » 23.12.2012 (Вс) 1:34

Отталкиваясь от
Vova_2581 писал(а):А что просто отключить устройство программно никак нельзя? Порылся в инете, нашел WMI класс Win32_NetworkAdapter

и немного поискав в Google, нашел

Disabling a Network Adapter
http://www.advancedqtp.com/disabling-a-network-adapter/

А потом
http://www.askit.ru/custom/progr_admin/ ... rvices.htm <<== !!

Пробовал из VBA Excel получать значения свойств при включенной / отключенной карте - да, читаются и есть разница. Но методы { т.e., Exec } не пробовал.

Код страшный, но работает, а времени нет . . .
Код: Выделить всё

Public Sub AdapterOnOff()
  Dim Adapter
  Dim X, Y, Z
  Dim i, j
 
  Set Adapter = GetObject("winmgmts:").InstancesOf("Win32_NetworkAdapter")
 
  i = 0
  For Each X In Adapter
    Debug.Print
    Debug.Print "===  i ="; i; "  ============================================"
   
    Set Y = X.Properties_
    Debug.Print Y.Count
   
    j = 1
    For Each Z In Y
      Debug.Print Format$(j, "@@@"); "  Name = "; Z.Name, "Value = "; Z.Value
      j = j + 1
    Next Z
   
    DoEvents
   
    i = i + 1
  Next X

  Set Z = Nothing
  Set Y = Nothing
  Set X = Nothing
  Set Adapter = Nothing
End Sub

Здоровья и удачи

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 23.12.2012 (Вс) 7:54

Vova_2581 писал(а):ger_karТак это же тоже самое, что предложил Хакер только не совсем рабочий код.Ваш код не выполняет никаких действий, а всего лишь возвращает статус: «Подключено» или «Отключено» указанное сетевое соединение вот здесь...
Вообще код был рассчитан на то, что человек открыв код и увидев
Код: Выделить всё
Dim objshell As New Shell
    Dim objItems As Shell32.FolderItems
    Dim objItem As Shell32.FolderItem
    Dim objConnections As Shell32.FolderItems
    Dim objVerbs As Shell32.FolderItemVerbs
    Dim objVerb As FolderItemVerb

Подключит Microsoft Shell Controls And Automation

23.12.png
23.12.png (8.26 Кб) Просмотров: 7404
И далее в ObjectBrowser исследует его. Для того, что-бы мой пример не только проверял состояние подключения (а это в любом случае нужно сделать), а еще и совершал какие либо действия (например включить или выключить адаптер) достаточно было добавить в него всего пару строк кода используя метод FolderItemVerb.DoIt (который по версии ObjectBrowser - Execute the verb :) ). Т.е. это был пример использования объектов Microsoft Shell Controls And Automation и глаголов в частности.

Vova_2581 писал(а):Нахожу адрес основного шлюза, к примеру, у меня: 157.20.14.17. Выполняю команду...route delete 157.20.14.17 mask 255.255.0.0 Получаю...«Не найден указанный маршрут»
Ну вообще ты делаешь совсем не то что нужно и в результате и получается, то что получается. Вообще команда route delete, как впрочем и остальные команды route оперирует маршрутами и исключительно ими, а ты указал вместо маршрута адрес своего сетевого адаптера. Например
23.12_2.png
23.12_2.png (5.09 Кб) Просмотров: 7404
Смотрим на таблицу маршрутизации и видим, что основной шлюз 192.168.88.1, хотя по большому счету это и не важно, а для нас более важен сейчас маршрут по умолчанию, который
0.0.0.0 0.0.0.0 192.168.88.1 192.168.88.2 10
Вот его и надо удалить, а вместе с ним удалиться и шлюз 192.168.88.1, а команда которая это сделает соответственно route delete 0.0.0.0 (оперировать надо маршрутом!!! и не как иначе!!!). Далее такое удаление маршрута будет действовать до первой перезагрузки, во время которой маршрут по умолчанию восстановиться. Что-бы удалить его насовсем нужно использовать route delete 0.0.0.0 -p, но работает это только на Windows 7. На висте не проверял, на Xp на постоянной основе маршрут не удаляется. Что-бы его удалить насовсем нужно действовать другими методами - изменить настройку сетевого адаптера (можно через командную строку, можно просто реестр подправить), но можно не удаляя маршрут по умолчанию просто подставить маршрут с левым шлюзом, для моего компа это бы было
route add 0.0.0.0 Mask 0.0.0.0 192.168.88.1 If 2 -p
Для твоего смотри сам.

PS Такие действия как отключение сетевого адаптера лучше, как и говорил Хакер выполнять имея разделение на админа и юзера, а иначе большого смысла в этом нет, так как адаптер в ручную можно на раз включить. С таблицей маршрутизации все немного хитрее. В этом случае, для того что-бы догадаться, почему вроде все включено, а нета нет как нет, нужно обладать хоть небольшим запасом знаний :) . Хотя более менее продвинутого юзера и это вряд ли остановит.
Бороться и искать, найти и перепрятать

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Vova_2581 » 23.12.2012 (Вс) 18:11

Sam777e
Disabling a Network Adapter – код по этой ссылке у меня не работает – опять-таки: «не поддерживается метод или свойство...» в строке...
Код: Выделить всё
objDrvs.itemindex(i).properties_.Item("MACAddress").Value

Видимо Microsoft в последующих обновлениях XP, по каким-то причинам,
что-то стала менять без особых предупреждений в MSDN.
А метод disable убрала или заменила на SetPowerState посчитав, что этого достаточно.
А тот код, что идет ниже, просто перечисляет значения свойств класса – это не совсем то, что нужно.

Хакер
В принципе идею я понял: создать два профиля Admin и User, загружаться под User, а программу управления запускать от имени Admin и через нее управлять доступом в инет. Если так, то, думаю, это как вариант верный, но не самый простой. Оставлю на десерт. :)

ger_kar писал(а):Вообще код был рассчитан на то, что человек открыв код и увидев...
Подключит Microsoft Shell Controls And Automation...

Именно так я и с делал, только Вы угадали... ObjectBrowser не исследовал. Как-то не догадался и поспешил... прошу прощения.

Спасибо Вам за детальное разъяснение относительно команды route!
Теперь все понятно. У меня получилось вырубить интернет удалением основного маршрута. Ура!! :)
Правда, если выполнить передозвон, то маршрут снова восстанавливается, даже не надо перезагружать комп – это минус. :(
Воспользовался Вашим вторым советом, т.е. подставил маршрут с левым шлюзом – сработало, но, опять-таки инет восстановился после передозвона.
Причем в списке route print основной маршрут восстановился и левый (добавленный) остался. :( Или, видимо, я что-то не так сделал?
В принципе, пойдет и такой вариант. Программа будет проверять есть доступ в инет или нет, и если есть, то удалять основной маршрут.
Спасибо и на этом! :)

ger_kar писал(а):...можно через командную строку, можно просто реестр подправить...

Если можно подробней? Что именно и где править?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Хакер » 23.12.2012 (Вс) 18:16

Vova_2581 писал(а):Хакер
В принципе идею я понял: создать два профиля Admin и User, загружаться под User, а программу управления запускать от имени Admin и через нее управлять доступом в инет. Если так, то, думаю, это как вариант верный, но не самый простой. Оставлю на десерт. :)

Что значит создать? Они уже должны быть созданы. Есть встроенная администраторская учётка, может быть было создано ещё несколько администраторских учёток, и в конце-концов должны быть учётки, под которыми все, кто работаеют за компьютером, работают сейчас.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 23.12.2012 (Вс) 18:35

Если речь зашла о передозвоне, то речь видимо уже совсем не о сетевом адаптере, как предполагалось при даче советов, и как указано в самом названии темы, а о Dial up соединении, на основе видимо модема. Модемное соединение не есть сетевое соединение через сетевой адаптер, и естественно, что советы данные для сетевого адаптера не подойдут для модемного. Теперь понятно почему
Vova_2581 писал(а):Disabling a Network Adapter – код по этой ссылке у меня не работает – опять-таки: «не поддерживается метод или свойство...» в строке...

Странное дело, ты хочешь одно, а вопрос про другое...
Вобщем сначала опиши полностью суть проблемы, потом исходя из этого сформулируй вопрос. А то будет опять пальцем в небо.
Vova_2581 писал(а):Если можно подробней? Что именно и где править?
Теперь даже и не знаю ибо, как выяснилось надо совсем не то, о чем все думали изначально.

ЗЫ: Кстати дополнительно к совету Хакера и если это диалап, то в свойствах соединения можно установить опцию, кому это соединение будет доступно.
Бороться и искать, найти и перепрятать

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Vova_2581 » 23.12.2012 (Вс) 20:09

ger_kar
К сожалению, не очень я силен в сетях, поэтому опишу вам, как оно у меня устроено, а вы уже делайте правильные выводы.
Вообщем, модема, как такового, у меня нет. А сеть устроена так...
На чердаке установлен router (кажется, так называется), к нему подключена антенна, которая направлена на другую антенну подключенную уже к серверу провайдера (Radio-интернет типа Wi-Fi что-ли). От моего router’a ко мне через витую пару на сетевую карту подводится соединение.
Изображение
Чтобы войти в Инет я запускаю окно дозвона...
Изображение
ввожу логин и пароль.
Вот так. Так что инет приходит ко мне через сетевую карту и router.

P.S.
Доступа к router’у у меня нет. Логин и пароль к нему знает только провайдер. Нам с соседями не говорят, видимо, чтобы не лазили в настройки.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 23.12.2012 (Вс) 21:53

Т.е. получается, что соединение через сетевую карту и PPPoE авторизация через компьютер настроена. И выключать программно ты пытался соединение, а не сетевой адаптер? Какие настройки у адаптера?
Вобщем результаты ipconfig /all и route print в студию.
Но самый правильный вариант, тот который предложил Хакер, в том окне, который у тебя на скрине даже менять ничего не надо. Т.е. сохранять пароль только для админа. Под юзером пароля не будет. И если юзер пароль не знает, то и все. Чем тебе этот вариант не нравиться то?
Бороться и искать, найти и перепрятать

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Vova_2581 » 23.12.2012 (Вс) 22:39

ger_kar писал(а):Но самый правильный вариант, тот который предложил Хакер

Ну, видимо, на этом и остановимся. Просто думал, что выключить сетевую карту будет просто, а, как оказалось, сложно.
Ладно, спасибо всем, за отзывы, советы и предложения.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 24.12.2012 (Пн) 6:47

Выключить карту абсолютно не сложно, а очень даже просто, но если доступ не разделен на юзера и админа то и включить обратно точно также можно без проблем. Что касается таблицы маршрутизации, то при таком способе соединения как у тебя, маршрут по умолчанию будет восстанавливаться после каждого переподключения, но и фиг с ним, потому, что существуем масса других "фокусов" с маршрутами. Но не имея точных сведений, не возможно дать точную рекомендацию. А вот общего характера пожалуйста. Ну например можно замкнуть подсеть в которой находятся DNS сервера провайдера или прописать несколько маршрутов если подсеть не одна. Тогда будет наблюдаться такой эффект. Интернет хосты будут пинговаться по IP адресу, но по URL адресу доступа не будет. Только маршруты эти нужно делать постоянными.
Открой gpedit.msc и на вкладке Конфигурация пользователя > Административные шаблоны > Сеть > Сетевые подключения увидишь политики, которые тебе могут подойти.
Бороться и искать, найти и перепрятать

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Vova_2581 » 24.12.2012 (Пн) 16:25

ger_kar
Хорошо, спасибо, посмотрю...

Вы уж извините за упрямство, но вот все никак не могу успокоиться...
Если зайти в свойства сетевой карты и перейти на вкладку «Дополнительно», то в списке «Свойство» можно увидеть параметр «Режим энергосбережения...». Так вот, когда его включаешь, питание сетевой карты отключается, а вместе с ней и инет напрочь. Правда он снова включается, если пару раз перезвонить. :? В WMI классе Win32_NetworkAdapter за это отвечает метод SetPowerState с параметром «6».
Изображение
Нашел даже код, но не рабочий.
Код: Выделить всё
Private Sub Form_Load()
strServer = "."

Set objWMI = GetObject("winmgmts:\\" & strServer & "\root\cimv2")

strWQL = "select * from Win32_NetworkAdapter"
Set objInstances = objWMI.ExecQuery(strWQL, , 48)

For Each objInstance In objInstances
    p_PowerState = 0
    p_Time = "20051205044912.546875+060"

    ' Uncomment next line to actually execute the method!
     intResult = objInstance.SetPowerState(p_PowerState, p_Time)

    MsgBox "Result: " & intResult
Next
End Sub

Опять-таки пишет, что метод не найден, но он то есть – это точно! Вы случайно не знаете, как правильно использовать этот режим в WMI?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 24.12.2012 (Пн) 19:57

Знаю, но в WinXP он не будет работать, и к тому же он работает не со всеми сетевыми адаптерами.
И зачем пытаться парится с WMI (я люблю эту технологию и довольно хорошо ее изучил). Для этого случая WMI не совсем то.
Я же привел рабочий код. Туда для того, что-бы он что-то включал/выключал надо то было добавить всего 2 строчки.
Ну и убрать лишнее. Вот пример
Пример.rar
(5.79 Кб) Скачиваний: 233
Бороться и искать, найти и перепрятать

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Vova_2581 » 24.12.2012 (Пн) 20:59

ger_kar
Огромное Вам СПАСИБО! Пример рабочий, думаю этого достаточно. :)
Спасибо за помощь! :)

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 24.12.2012 (Пн) 21:06

Пожалуйста, только если доступ не разделить на админа и юзера, то пользы от такого выключения весьма мало.
Политики гораздо эффективнее.
Бороться и искать, найти и перепрятать

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Sam777e » 24.12.2012 (Пн) 22:14

У меня код [ думаю, что просто такой же как у ger_kar ] работает. Программа меняет состояние сетевой карты на противоположное. Может надо подработать на предмет русских названий.
Код: Выделить всё
    '  Library Shell32
    '      C:\WINDOWS\system32\SHELL32.dll
    '      Microsoft Shell Controls And Automation
 
Sub AdapterOnOff_3()
  Dim sConnectionName As String, sEnableVerb As String, sDisableVerb As String
 
  Dim bEnabled As Boolean
 
  Dim shellApp, oControlPanel, oNetConnections, folderitem
  Dim oLanConnection, Verb, oEnableVerb, oDisableVerb
 
 
  sConnectionName = "LocalNet"
 
  sEnableVerb = "En&able"   ' "&Âêëþ÷èòü"
  sDisableVerb = "Disa&ble" ' "&Îòêëþ÷èòü"
 
 
  Set shellApp = CreateObject("shell.application")
  Set oControlPanel = shellApp.Namespace(ssfCONTROLS)
 
  Set oNetConnections = Nothing
  For Each folderitem In oControlPanel.items
    Debug.Print folderitem.Name   ' = "Network Connections" Then
    If folderitem.Name = "Network Connections" Then  ' Ñåòåâûå ïîäêëþ÷åíèÿ
      Debug.Print
      Set oNetConnections = folderitem.getfolder: Exit For
    End If
  Next

  If oNetConnections Is Nothing Then
          '    MsgBox "Couldn't find 'Network and Dial-up Connections' folder"
    MsgBox "Couldn't find 'Network and Dial-up Connections' folder"
    Exit Sub
  End If

  Set oLanConnection = Nothing
  For Each folderitem In oNetConnections.items
    Debug.Print folderitem.Name   ' = "Network Connections" Then
                            '    If LCase(folderitem.Name) = LCase(sConnectionName) Then
    If folderitem.Name = "Local Area Connection" Then
      Debug.Print
      Set oLanConnection = folderitem: Exit For
    End If
  Next

  If oLanConnection Is Nothing Then
    MsgBox "Couldn't find '" & sConnectionName & "' item"
    Exit Sub
  End If

  bEnabled = True
  Set oEnableVerb = Nothing
  Set oDisableVerb = Nothing
                                                        '  s = "Verbs: " & vbCrLf
  For Each Verb In oLanConnection.verbs
    Debug.Print Verb.Name
                                                        '    s = s & vbCrLf & Verb.Name
    If Verb.Name = sEnableVerb Then
      Set oEnableVerb = Verb
      bEnabled = False
    End If
    If Verb.Name = sDisableVerb Then
      Set oDisableVerb = Verb
    End If
  Next

  If bEnabled Then oDisableVerb.DoIt Else oEnableVerb.DoIt
End Sub


Но !
Выключает "тихо", а ВКЛЮЧАЕТ очень даже ВИДИМО.

Что интересно, в свойствах моей сетевой карты
21 Name = Name Value = 3Com EtherLink III ISAPNP Ethernet Adapter (Generic 3C509b)

под номером 28 [ счет от 1 ] говорится :

28 Name = PowerManagementSupported Value = False <<==== !!!


Windows XP Version 2002 SP2
Здоровья и удачи

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Sam777e » 24.12.2012 (Пн) 22:33

Да, сейчас посмотрел код у ger_kar - практически один к одному. Смотрел очень бегло, место в Select Case, где есть ....DoIt смутило.

Если поставить программу в Автозагрузку / Выполнение и чтобы она, в соответствии с текущим временем выключала [ 10:00 ], а потом, если время > 18:30 ничего не делала, то ~= все нормально.
То есть я представляю себе такую схему.
Время без надзора - программа работает, каждые x минут /секунд проверяет-выключает, в SysTray не должна быть видна.
Время с родителями - сама себя выгружает.

Это представление по объяснению Vova_2581. Время можно указывать в текстовом файле . . .
Здоровья и удачи

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 24.12.2012 (Пн) 22:49

Sam777e писал(а):Да, сейчас посмотрел код у ger_kar - практически один к одному. Смотрел очень бегло, место в Select Case, где есть ....DoIt смутило.
А что там должно смущать? Если ошибок не было в момент отключения/подключения то функция вернет True или False в противном случае. Но при вызове это не используется и функция вызывается как процедура.
Бороться и искать, найти и перепрятать

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение Sam777e » 31.12.2012 (Пн) 21:18

Посмотрел внимательнее; понял, что был неправ - не было времени увидеть, что все перечисленные действия "Disa&ble", "&Отключить", "&Запретить" одинаковы.

Однако не стоит писать
"Получение списка возможных действий с подключением"
- когда на самом деле главным идет выполнение нужного нам действия.

Код: Выделить всё
        '------- Блок 3 ------- (Получение списка возможных действий с подключением)
        If Not (objVerbs Is Nothing) Then   'Если объектная переменная не пуста
            For Each objVerb In objVerbs
                Select Case objVerb.Name
                    Case "Disa&ble", "&Отключить", "&Запретить"
                        objVerb.DoIt                                  ' <<====
                        If Err.Number = 0 Then DisConnect = True
                        Exit For
                End Select
            Next objVerb
        End If


С уважением
Здоровья и удачи

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как программно отключить сетевую плату в Диспетчере устр

Сообщение ger_kar » 31.12.2012 (Пн) 21:34

Код функции был выдран из готового проекта и немного доработан напильником :)
Когда я просто приводил в пример, думал этого будет достаточно, но как оказалось нет.
Пришлось немного доделать. На коментарии, которые я писал применительно к своему случаю не обратил внимания.
Бороться и искать, найти и перепрятать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 72

    TopList