Jak włączyć wyłączyć p ołaczenie sieciowe przez rejestr


(Kkmks) #1

interesuje mnie ścieżka do klucza odpowiedzialnego za status danego połączenia sieciowego czyli włączone wyłączone (nazwa to połączenie lokalne, nie interesuje mnie wifi, tylko ethernet).

Lub innego znanego wam rozwiązania, aby przy użyciu .vba/.bat/.reg włączać i wyłączać połączenie sieciowe.

system to win xp sp3

polecenie:

netsh interface set interface name = "Połączenie lokalne" admin=ENABLED

mi ni działa, a szukam czegoś w ten deseń


(Tomek Matz) #2

Powinno działać (sprawdziłem u siebie), choć można to polecenie trochę odchudzić:

Nie dostajesz żadnego komunikatu błędu (może wpisałeś złą nazwę tego interfejsu -> sprawdź ipconfig)? Poza tym jeśli masz Vista/7 to wiersz poleceń musisz uruchomić z uprawnieniami administratora.


(Kkmks) #3

czy wy ludzie umiecie czytać to co ktoś napisał, szczególnie zwracając uwagę na 4 linijkę od końca ?


(Tomek Matz) #4

O cholera, nie wiem jak to mogłem przeoczyć (obiecuję poprawę :slight_smile: ). Dziś musiałem specjalnie zainstalować XP na wirtualnej, żeby potestować to polecenie (nie miałem dziś dostępu do komputerów z XP).

Generalnie faktycznie masz rację polecenie nie działa (nie wiedzieć czemu). Początkowo wywalało mi komunikat błędu, że nie podano wszystkich wymaganych parametrów (a tak na prawdę wymagana powinna być tylko nazwa interfejsu, reszta jest opcjonalna zgodnie z dokumentacją). Jak podałem wszystkie (nawet te opcjonalne) to dostałem komunikat: "Dedykowanych interfejsów nie można łączyć, odłączać, włączać i wyłączać. Nie można ukończyć wykonywania tej funkcji." Nie zmieniam tego co mówiłem wcześniej, bo polecenie jest poprawne, ale faktycznie nie działa pod XP.

Spróbuj użyć skryptu WMI. Zapisz poniższy kod w pliku o rozszerzeniu vbs i odpal dwuklikiem lub z poziomu wiersza poleceń (wcześniej musisz w kodzie wstawić właściwą nazwę interfejsu):

'http://msdn.microsoft.com/en-us/library/aa394595%28v=VS.85%29.aspx


strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")


Set colItems = objWMIService.ExecQuery _

    ("Select * From Win32_NetworkAdapter Where NetConnectionID = 'Połączenie lokalne'")

For Each objItem in colItems

    strMACAddress = objItem.MACAddress

Next


Set colItems = objWMIService.ExecQuery _

    ("Select * From Win32_NetworkAdapterConfiguration")

For Each objItem in colItems

    If objItem.MACAddress = strMACAddress Then objItem.ReleaseDHCPLease() ' Zeby wlaczyc RenewDHCPLease()

Next

(Kkmks) #5

o takie coś mi właśnie chodziło po głowie, tak przy okazji jest gdzieś polska dokumentacja vbs z xp ? (poza konsolową oczywiście)

sprawdzę i uaktualnię posta za kilka minut

-- Dodane 26.08.2011 (Pt) 3:43 --

powiem ci tak, że to polecenie działa jak następująca komenda

@echo off

ipconfig /release po*

ipconfig /renew "połączenie lokalne"

i nie wyłącza/włącza połączenia sieciowego, zwalnia i odnawia (jak zwalani to nie ma dostępu do sieci, ale nie o to chodzi) więc nie o to chodzi niestety. Ten problem, który opisałem występuje chyba w każdej polskojęzycznej wersji od czasów sp3. W angielskich wersjach nie ma tego problemu.

-- Dodane 26.08.2011 (Pt) 3:45 --

a nie ma w rejestrze czegoś ala klucz służący za kontrolkę do włączenia wyłączenia połączenia sieciowego?


(Tomek Matz) #6

Fakt, to jest odpowiednik tych poleceń (zapomniałem o nich). Tam w linku, który podałem wyżej jest napisane, że one służą do zwalniania i odnawiania dzierżawy DHCP (dodam tutaj w odpowiedzi na Twoje pytanie, że nie wiem, czy jest jakaś polska dokumentacja WMI).

Czy da się wyłączyć dany interfejs sieciowy przez rejestr? Nie wiem (na 99% nie). Wczoraj szukałem jak zmieniać nazwę interfejsu sieciowego i trafiłem na ten link

Click. Podejrzewałem, że to polskie znaki diaktryczne w poleceniu netsh mogą powodować, że nie działa ono poprawnie, ale to nie to. Argumenty polecenia netsh (admin i connect) w XP działają tylko dla interfejsów sieciowych połączeń Wi-Fi (przynajmniej tak wskazuje dokumentacja tego polecenia) i właśnie dlatego nie działa Ci to polecenie (Jesteś pewien, że w anglojęzycznej wersji XP to działa? To by było dość dziwne). Niemniej w powyższym linku są informacje o kluczach rejestru używanych przez poszczególne interfejsy sieciowe. Możesz je sobie przejrzeć, ale ja tam nie widziałem, żeby było coś w stylu Włącz/Wyłącz.

Sprawdzałem jak działa komenda Włącz/Wyłącz w Menu Start -> Ustawienia -> Połączenia sieciowe -> ppm na nazwie interfejsu sieciowego -> Włącz/Wyłącz. Działa ona na takiej samej zasadzie jak powyższe polecenie netsh, czyli po prostu wyłącza dany adapter interfejsu sieciowego (patrz lista karty sieciowe w menedżerze urządzeń). Przy uzyciu skryptu WMI w Windows Vista/7 mozna wykonać tą samą czynność stosunkowo prosto, niestety tak łatwo nie ma już w Windows XP. Tak, czy siak trochę pogooglowałem i udało mi się natrafić na ciekawy skrypt. Musiałem go przerobić (bo nie działał do końca poprawnie) i ostateczna wersja wygląda następująco (skrypt ten ma na celu wykonywać powyższe kroki tyle, że robi to poprzez panel sterowania):

Option Explicit


Dim strNetworkConnectionsFolder, strNetworkConnectionName, strEnable, strDisable

Dim objShell, objNamespace, objItem, objNetworkConnectionsFolder, objNetworkConnection, objVerb

Dim bEnable


strNetworkConnectionsFolder = "Połączenia sieciowe"

strNetworkConnectionName = "Połączenie lokalne"

strEnable = "&Włącz"

strDisable = "&Wyłącz"


Set objShell = CreateObject("Shell.Application")

Set objNamespace = objShell.Namespace(3) ' (ShellSpecialFolderConstants Enumeration - http://msdn.microsoft.com/en-us/library/bb774096%28v=vs.85%29.aspx)


Set objNetworkConnectionsFolder = Nothing

' Find Network Connections Folder

For Each objItem in objNamespace.Items

	If objItem.Name = strNetworkConnectionsFolder Then

		Set objNetworkConnectionsFolder = objItem.GetFolder

		Exit For

	End If

Next


If objNetworkConnectionsFolder is Nothing Then

	WScript.Echo "Network connections folder not found."

	WScript.Quit

End If


Set objNetworkConnection = Nothing

' Find the Network Connection

For Each objItem in objNetworkConnectionsFolder.Items

	If LCase(objItem.name) = LCase(strNetworkConnectionName) Then

		Set objNetworkConnection = objItem

		Exit For

	End If

Next


If objNetworkConnection is Nothing Then

	WScript.Echo "Network connection not found."

	WScript.Quit

End If


bEnable = False

' Disable/Enable Network Connection

For Each objItem in objNetworkConnection.Verbs

	If (objItem.Name = strDisable) Or (objItem.Name = strEnable) Then

		Set objVerb = objItem

		If objItem.Name = strEnable Then bEnable = True

	End If

Next

objVerb.DoIt


'Give the connection time to stop/start

WScript.Sleep 1000


If bEnable Then

	WScript.Echo "Network connection enabled."

Else

	WScript.Echo "Network connection disabled."

End If

Daj znać, czy zadziała i czy takie rozwiązanie może być (w sumie innego nie widzę).


(Kkmks) #7

działa dokładnie tak, jak chciałem, do tego nie będę musiał się bawić z wykrywaniem aktywności połączenia.

jeśli mógłbyś opisać kod to również byłbym wdzięczny.

mam takie pytanko jeszcze na zakończenie, czy wszystkie info czerpałeś z msdn'u ?

Dzięki za wszystko Jesteś moim Shihan'em xD


(Tomek Matz) #8

Kod skryptu znalazłem w sieci, ale tak jak pisałem, on do końca dobrze nie działał i musiałem go przerabiać. Objaśnienia wszystkich użytych funkcji znajdują się w dokumentacji msdn (w kodzie umieściłem w komentarzu jeden istotny link). W skrócie działa to tak, że otwierany jest panel sterowania, następnie w panelu sterowania wyszukiwany jest w pętli folder o nazwie Połączenia sieciowe, następnie w tym folderze również w pętli wyszukiwane jest konkretne połączenie, tj. to o nazwie Połączenie lokalne. Następnie przeszukiwane są wszystkie dostępne funkcje jakie można wykonać na tym połączeniu (te funkcje możesz zobaczyć, gdy klikniesz ppm na danym połączeniu) i następnie w momencie, gdy zostanie znaleziona funkcja włącz lub wyłącz to jest ona klikana (oczywiście programowo). W zależności od tego czy znaleziono funkcję włącz czy wyłącz zwracany jest inny komunikat na zakończenie skryptu. A poza tym to nie ma za co :slight_smile: