Página 1 de 1

Funciones Configuración Red y Saber nombre Red activa

Publicado: 06 Feb 2009, 03:54
por Chefito
Por fin me he decido a acabar estas funciones con un script de ejemplo :smt024 . Aunque sea más de los mismo, ya que ultimamente se ha realizado mucho código sobre este tema, es algo que tenía pendiente desde hace algunos meses y tenía que acabarlo :smt004 .
Pues eso. Son dos funciones. Una se llama ConfigurarRed, la cual configura toda la red (ip,mascara,puerta,dns), y la otra se llama NombreRedActiva, la cual te da el nombre de la red activa...como su nombre indica :smt002 .

Están bastante documentadas:

Código: Seleccionar todo

#cs ***********************************************************************************************************
Nombre función: ConfigurarRed
Descripción: Configura la IP, Mascara, Puerta, Dns primaria, Dns secundaria, de una red.
Parámetros: $auto=0, se introducen todos los datos manualmente
         $auto=1, se pone toda la configuración automática (dhcp). Valor por defecto.
         $auto=2, la configuración es automática, y el dns es manual.
         $IP= Dirección ip, $Mascara= Máscara de subred, $Puerta= Puerta de enlace
         $DNS1= Dns primaria, $DNS2= Dns secundario, $NombreRed= El nombre de la red que quieres configurar.
		Todos estos datos no tienen nada por defecto. En esta situación no se cambia la configuración.
Resultado: Una matriz de dos dimensiones. La primera dimensión tiene 3 elementos. El 1º (0) se refiere a la 
         configuración de red (ip, mascara, puerta), y el 2º y 3º (1 y 2) a la Dns primaria y secundaria respectivamente.
         La segunda dimensión consta de 2 elementos. El 1º (0) indica si se ha cambiado (0) o no (1). En el 2º se 
         almacena el resultado de la linea de comandos al ejecutarse el comando.
Autor: Chefito
Otros: Como siempre, código totalmente libre ;). Se puede mejorar lo que se quiera. Se agradecería nombrar en
el código al autor.
#ce ***********************************************************************************************************

Func ConfigurarRed($auto=1,$IP="",$Mascara="",$Puerta="",$DNS1="",$DNS2="",$NombreRed="Conexión de área local")
	Dim $ConfiguracionRed[3][2]
	If $auto=0 Then
		
		If $IP<>"" Then
			Local $consola=Run(@ComSpec & ' /c netsh interface ip set address "' & $NombreRed & '" static ' & $IP & ' ' & $Mascara & ' ' & $Puerta & ' 1', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line = StdoutRead($consola)
				If StringLen($line)>0 Then
					If StringInStr($line,"Aceptar")<>0 Then 
						$ConfiguracionRed[0][0]=1
						$ConfiguracionRed[0][1]=$line
						ExitLoop
					Else
						$ConfiguracionRed[0][0]=0
						$ConfiguracionRed[0][1]=$line
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[0][0]=-1
			$ConfiguracionRed[0][1]="No se ha cambiado la dirección IP"
		EndIf
		
		
		If $DNS1<>"" Then
			$consola=Run(@ComSpec & ' /c netsh interface ip set dns "' & $NombreRed & '" static ' & $DNS1 & ' primary', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line2 = StdoutRead($consola)
				If StringLen($line2)>0 Then
					If StringInStr($line2,"Aceptar")<>0 Then 
						$ConfiguracionRed[1][0]=0
						$ConfiguracionRed[1][1]=$line2
						ExitLoop
					Else
						$ConfiguracionRed[1][0]=0
						$ConfiguracionRed[1][1]=$line2
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[1][0]=-1
			$ConfiguracionRed[1][1]="No se ha cambiado la dirección DNS primaria"
		EndIf
			
		If $DNS2<>"" Then
			$consola=Run(@ComSpec & ' /c netsh interface ip add dns "' & $NombreRed & '" static addr=' & $DNS2 & ' index=2', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line3 = StdoutRead($consola)
				If StringLen($line3)>0 Then
					If StringInStr($line3,"Aceptar")<>0 Then 
						$ConfiguracionRed[2][0]=0
						$ConfiguracionRed[2][1]=$line3
						ExitLoop
					Else
						$ConfiguracionRed[2][0]=0
						$ConfiguracionRed[2][1]=$line2
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[2][0]=-1
			$ConfiguracionRed[2][1]="No se ha cambiado la dirección DNS secundaria"
		EndIf
		
	ElseIf $auto=1 Then
			
		Local $consola=Run(@ComSpec & ' /c netsh interface ip set address name="' & $NombreRed & '" source=dhcp', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
		While 1
			Sleep(100)
			$line = StdoutRead($consola)
			If StringLen($line)>0 Then
				If StringInStr($line,"Aceptar")<>0 Then 
					$ConfiguracionRed[0][0]=1
					$ConfiguracionRed[0][1]=$line
					ExitLoop
				Else
					$ConfiguracionRed[0][0]=0
					$ConfiguracionRed[0][1]=$line
					ExitLoop
				EndIf
			EndIf
		Wend
		
		
		$consola=Run(@ComSpec & ' /c netsh interface ip set dns "' & $NombreRed & '" dhcp', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
		While 1
			Sleep(100)
			$line2 = StdoutRead($consola)
			If StringLen($line2)>0 Then
				If StringInStr($line2,"Aceptar")<>0 Then 
					$ConfiguracionRed[1][0]=0
					$ConfiguracionRed[1][1]=$line2
					ExitLoop
				Else
					$ConfiguracionRed[1][0]=0
					$ConfiguracionRed[1][1]=$line2
					ExitLoop
				EndIf
			EndIf
		Wend
	
	Else
		
		Local $consola=Run(@ComSpec & ' /c netsh interface ip set address name="' & $NombreRed & '" source=dhcp', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
		While 1
			Sleep(100)
			$line = StdoutRead($consola)
			If StringLen($line)>0 Then
				If StringInStr($line,"Aceptar")<>0 Then 
					$ConfiguracionRed[0][0]=1
					$ConfiguracionRed[0][1]=$line
					ExitLoop
				Else
					$ConfiguracionRed[0][0]=0
					$ConfiguracionRed[0][1]=$line
					ExitLoop
				EndIf
			EndIf
		Wend

		If $DNS1<>"" Then
			$consola=Run(@ComSpec & ' /c netsh interface ip set dns "' & $NombreRed & '" static ' & $DNS1 & ' primary', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line2 = StdoutRead($consola)
				If StringLen($line2)>0 Then
					If StringInStr($line2,"Aceptar")<>0 Then 
						$ConfiguracionRed[1][0]=0
						$ConfiguracionRed[1][1]=$line2
						ExitLoop
					Else
						$ConfiguracionRed[1][0]=0
						$ConfiguracionRed[1][1]=$line2
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[1][0]=-1
			$ConfiguracionRed[1][1]="No se ha cambiado la dirección DNS primaria"
		EndIf
			
		If $DNS2<>"" Then
			$consola=Run(@ComSpec & ' /c netsh interface ip add dns "' & $NombreRed & '" static addr=' & $DNS2 & ' index=2', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line3 = StdoutRead($consola)
				If StringLen($line3)>0 Then
					If StringInStr($line3,"Aceptar")<>0 Then 
						$ConfiguracionRed[2][0]=0
						$ConfiguracionRed[2][1]=$line3
						ExitLoop
					Else
						$ConfiguracionRed[2][0]=0
						$ConfiguracionRed[2][1]=$line2
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[2][0]=-1
			$ConfiguracionRed[2][1]="No se ha cambiado la dirección DNS secundaria"
		EndIf

	EndIf
	Return $ConfiguracionRed	
EndFunc

#cs ***********************************************************************************************************
Nombre función: NombreRedActiva
Descripción: Devuelve el nombre de la red activa.Si no encuentra ninguna red activa, devuelve 0.
Parámetros: Ninguno.
Autor: Chefito
Otros: Como siempre, código totalmente libre ;). Se puede mejorar lo que se quiera. Se agradecería nombrar en
el código al autor.
#ce ***********************************************************************************************************

Func NombreRedActiva()
	Local $posicion=0
	$consola=Run(@ComSpec & ' /c ipconfig', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
	While 1
		Sleep(100)
		$line2 = $line2 & StdoutRead($consola)
		If @error Then ExitLoop
	Wend
	Do
		$posicionIni=$posicion+19
		$posicion=StringInStr($line2,"Adaptador Ethernet",0,1,$posicionIni) 
	Until $posicion=0
	If $posicionIni<>0 Then
			$posFin=StringInStr($line2,":",0,1,$posicionIni)-10
			Return StringMid($line2,$posicionIni,$posFin-$posicionIni)
	Else
			Return 0
	EndIf
EndFunc
Y el script ejemplo que muestra un poco como funcionan estas funciones:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <EditConstants.au3>
#Include <GuiIPAddress.au3>
#Include <String.au3>
#Include <GuiListBox.au3>
#include <WindowsConstants.au3>


	Local 	$itemTotales="",$textoList="", $IP, $Mascara, $DNS, $Puerta, $btn, $msg, $radio_1, $radio_2, $file, $chars, $edit, $mensaje, $linea, $line, $line2, $acierto=1
	
	; Creación de la GUI.
	
	$hCreate=GUICreate("Cambia la configuración de la Red", 460, 450, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 200); WS_EX_ACCEPTFILES
	GUISetBkColor(0x006666)
	GUICtrlCreateLabel("IP", 10, 28)
	GUICtrlCreateLabel("MENSAJES                 ", 285, 130)
	GUICtrlSetFont(-1,14,600,2)
	GUICtrlSetColor(-1,0x672211)
	Local $edit=GUICtrlCreateEdit("", 230, 160,220,100,$ES_READONLY+$ES_AUTOVSCROLL + $WS_VSCROLL)
	GUICtrlSetColor(-1,0xff0000)
	$IP = _GUICtrlIpAddress_Create($hCreate, 80, 25, 120, 20)
	_GUICtrlIpAddress_Set($IP,"192.168.0.15")
	GUICtrlCreateLabel("MÁSCARA", 10, 62)
	$Mascara=_GUICtrlIpAddress_Create($hCreate, 80, 58, 120, 20) 
	_GUICtrlIpAddress_Set($Mascara,"255.255.255.0")
	GUICtrlCreateLabel("PUERTA", 10, 98)
	$Puerta=_GUICtrlIpAddress_Create($hCreate, 80, 95, 120, 20) 
	_GUICtrlIpAddress_Set($Puerta,"178.168.0.1")
	GUICtrlCreateLabel("NOMBRE RED", 230, 28)
	$NombreRed=GUICtrlCreateInput("",320,25,120,20)
	
	$linea = GUICtrlCreateGraphic(5, 125, 200, 10)
	GUICtrlSetGraphic(-1, $GUI_GR_LINE,445,0)

	GUICtrlCreateLabel("DNS 1º", 230, 62)
	$DNS1=_GUICtrlIpAddress_Create($hCreate, 320, 58, 120, 20)
	GUICtrlCreateLabel("DNS 2º", 230, 98)
	$DNS2=_GUICtrlIpAddress_Create($hCreate, 320, 95, 120, 20)
    GUICtrlCreateGroup("Configuraciones", 20, 130, 200, 80)
    $radio_1 = GUICtrlCreateRadio("Utilizar configuración manual", 30, 150,170)
	GUICtrlSetState(-1,$GUI_CHECKED)
    $radio_2 = GUICtrlCreateRadio("Utilizar configuración automática", 30, 180,180)
    GUICtrlCreateGroup("", -99, -99, 1, 1)  ;close group
	$btn = GUICtrlCreateButton("ACEPTAR", 20, 230, 90, 30)
	GUICtrlSetBkColor(-1,0x314561)
	GUICtrlSetFont(-1,10,800)
	$btnAdd = GUICtrlCreateButton("Añadir Red", 120, 228, 90, 15)
	$btnDel = GUICtrlCreateButton("Borrar Red", 120, 247, 90, 15)
	$listaRed=GUICtrlCreateList("",10,290,440,150)
	
	;Fin de creación de la GUI.
	
	;Bloque para coger datos de un fichero.
	
	$file = FileOpen(@ScriptDir& "\datos.dat", 0)
	If $file <> -1 Then
		$textoList=FileRead($file)
		FileClose($file)
		If $textoList<>"" Then
			$matrizArchivo=StringSplit($textoList,@CR,1)
			For $ini=1 To $matrizArchivo[0]
				$itemTotales=$itemTotales & "|" & $matrizArchivo[$ini]
			Next
			GUICtrlSetData($listaRed,$itemTotales)
			$matriz=StringSplit($matrizArchivo[1]," --> ",1)
			GUICtrlSetData($NombreRed,$matriz[1])
			_GUICtrlIpAddress_Set($IP,$matriz[2])
			_GUICtrlIpAddress_Set($Mascara,$matriz[3])
			_GUICtrlIpAddress_Set($Puerta,$matriz[4])
			_GUICtrlIpAddress_Set($DNS1,$matriz[5])
			_GUICtrlIpAddress_Set($DNS2,$matriz[6])
		EndIf
	EndIf
	
	;Final de bloque para coger datos de un fichero.
	
	GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")	;captura mensajes para detectar el doble click en la lista.

	GUISetState()
	$msg = 0
	While $msg <> $GUI_EVENT_CLOSE
		Sleep(10)
		$msg = GUIGetMsg()
		Select
			Case $msg = $btn
				If GUICtrlRead($NombreRed)="" Then
					MsgBox(48,"Error","Debe poner un nombre de Red")
				Else
					If BitAND(GUICtrlRead($radio_1), $GUI_CHECKED) = $GUI_CHECKED Then	;entra en un checkbox u otro.
						$mensaje="Se está cambiando la configuración de Red a manual." & @CRLF & @CRLF
						GUICtrlSetData($edit,$mensaje)
							;configura la red manualmente según los valores de los objetos.
						$resultadoRed=ConfigurarRed(0,_GUICtrlIpAddress_Get($IP),_GUICtrlIpAddress_Get($Mascara),_GUICtrlIpAddress_Get($Puerta),_GUICtrlIpAddress_Get($DNS1),_GUICtrlIpAddress_Get($DNS2),NombreRedActiva())
						;Revisa los aciertos y errores y manda un mensaje según ocurra uno u otro.
						
						If $resultadoRed[0][0]=0 Then
							$mensaje=$mensaje & $resultadoRed[0][1]
						Else
							$mensaje=$mensaje & "Se ha cambiado la configuración con éxito."
						EndIf
						If $resultadoRed[1][0]=0 Then
							$mensaje=$mensaje & $resultadoRed[1][1]
						Else
							$mensaje=$mensaje & "Se ha cambiado el DNS primario con éxito."
						EndIf
						If $resultadoRed[2][0]=0 Then
							$mensaje=$mensaje & $resultadoRed[2][1]
						Else
							$mensaje=$mensaje & "Se ha cambiado el DNS secundario con éxito."
						EndIf
						GUICtrlSetData($edit,$mensaje)
					Else
						$mensaje="Se está cambiando la configuración de Red a dhcp." & @CRLF & @CRLF
						GUICtrlSetData($edit,$mensaje)
						;Configura la red automaticamente (dhcp).
						$resultadoRed=ConfigurarRed(1,"","","","","",NombreRedActiva())
						If $resultadoRed[0][0]=0 Then
							$mensaje=$mensaje & $resultadoRed[0][1]
						Else
							$mensaje=$mensaje & "Se ha cambiado la configuración con éxito."
						EndIf
						GUICtrlSetData($edit,$mensaje)
					EndIf
				EndIf
			Case $msg=$radio_1	;activa los controles si pulsas el radio 1.
				ControlEnable($IP,"","")
				ControlEnable($Mascara,"","")
				ControlEnable($Puerta,"","")
				GUICtrlSetState($NombreRed,$gui_enable)
				ControlEnable($NombreRed,"","")
				ControlEnable($DNS1,"","")
				ControlEnable($DNS2,"","")
			Case $msg=$radio_2	;desactiva los controles si pulsas el radio 2
				ControlDisable($IP,"","")
				ControlDisable($Mascara,"","")
				ControlDisable($Puerta,"","")
				GUICtrlSetState($NombreRed,$gui_disable)
				ControlDisable($NombreRed,"","")
				ControlDisable($DNS1,"","")
				ControlDisable($DNS2,"","")
			Case $msg=$btnAdd	;suma la configuración a la lista según los valores de los controles.
				If GUICtrlRead($NombreRed)="" Then
					MsgBox(48,"Error","Debe poner un nombre de Red")
				Else
					GUICtrlSetData($listaRed,GUICtrlRead($NombreRed) & " --> " & _GUICtrlIpAddress_get($IP) & " --> " & _GUICtrlIpAddress_Get($Mascara) & " --> " & _GUICtrlIpAddress_Get($Puerta) & " --> " & _GUICtrlIpAddress_Get($DNS1) & " --> " & _GUICtrlIpAddress_Get($DNS2))
					$textoList=""
					For $n=0 To _GUICtrlListBox_GetCount($listaRed)-1
						$textoList=$textoList & _GUICtrlListBox_GetText($listaRed,$n) & @CR
					Next
				EndIf
			Case $msg=$btnDel	;borra el item seleccionado de la lista.
				$itemActivo=_GUICtrlListBox_GetCurSel($listaRed)
				_GUICtrlListBox_DeleteString($listaRed,$itemActivo)
				$textoList=""
				For $n=0 To _GUICtrlListBox_GetCount($listaRed)-1
					$textoList=$textoList & _GUICtrlListBox_GetText($listaRed,$n) & @CR
				Next
		EndSelect
	WEnd
	
#cs ***********************************************************************************************************
Nombre función: ConfigurarRed
Descripción: Configura la IP, Mascara, Puerta, Dns primaria, Dns secundaria, de una red.
Parámetros: $auto=0, se introducen todos los datos manualmente
			$auto=1, se pone toda la configuración automática (dhcp).
			$auto=2, la configuración es automática, y el dns es manual.
			$IP= Dirección ip, $Mascara= Máscara de subred, $Puerta= Puerta de enlace
			$DNS1= Dns primaria, $DNS2= Dns secundario, $NombreRed= El nombre de la red que quieres configurar.
Resultado: Una matriz de dos dimensiones. La primera dimensión tiene 3 elementos. El 1º (0) se refiere a la 
			configuración de red (ip, mascara, puerta), y el 2º y 3º (1 y 2) a la Dns primaria y secundaria respectivamente.
			La segunda dimensión consta de 2 elementos. El 1º (0) indica si se ha cambiado (0) o no (1). En el 2º se 
			almacena el resultado de la linea de comandos al ejecutarse el comando.
Autor: Chefito
Otros: Como siempre, código totalmente libre ;). Se puede mejorar lo que se quiera. Se agradecería nombrar en
el código al autor.
#ce ***********************************************************************************************************

Func ConfigurarRed($auto=1,$IP="",$Mascara="",$Puerta="",$DNS1="",$DNS2="",$NombreRed="Conexión de área local")
	Dim $ConfiguracionRed[3][2]
	If $auto=0 Then
		
		If $IP<>"" Then
			Local $consola=Run(@ComSpec & ' /c netsh interface ip set address "' & $NombreRed & '" static ' & $IP & ' ' & $Mascara & ' ' & $Puerta & ' 1', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line = StdoutRead($consola)
				If StringLen($line)>0 Then
					If StringInStr($line,"Aceptar")<>0 Then 
						$ConfiguracionRed[0][0]=1
						$ConfiguracionRed[0][1]=$line
						ExitLoop
					Else
						$ConfiguracionRed[0][0]=0
						$ConfiguracionRed[0][1]=$line
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[0][0]=-1
			$ConfiguracionRed[0][1]="No se ha cambiado la dirección IP"
		EndIf
		
		
		If $DNS1<>"" Then
			$consola=Run(@ComSpec & ' /c netsh interface ip set dns "' & $NombreRed & '" static ' & $DNS1 & ' primary', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line2 = StdoutRead($consola)
				If StringLen($line2)>0 Then
					If StringInStr($line2,"Aceptar")<>0 Then 
						$ConfiguracionRed[1][0]=0
						$ConfiguracionRed[1][1]=$line2
						ExitLoop
					Else
						$ConfiguracionRed[1][0]=0
						$ConfiguracionRed[1][1]=$line2
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[1][0]=-1
			$ConfiguracionRed[1][1]="No se ha cambiado la dirección DNS primaria"
		EndIf
			
		If $DNS2<>"" Then
			$consola=Run(@ComSpec & ' /c netsh interface ip add dns "' & $NombreRed & '" static addr=' & $DNS2 & ' index=2', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line3 = StdoutRead($consola)
				If StringLen($line3)>0 Then
					If StringInStr($line3,"Aceptar")<>0 Then 
						$ConfiguracionRed[2][0]=0
						$ConfiguracionRed[2][1]=$line3
						ExitLoop
					Else
						$ConfiguracionRed[2][0]=0
						$ConfiguracionRed[2][1]=$line2
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[2][0]=-1
			$ConfiguracionRed[2][1]="No se ha cambiado la dirección DNS secundaria"
		EndIf
		
	ElseIf $auto=1 Then
			
		Local $consola=Run(@ComSpec & ' /c netsh interface ip set address name="' & $NombreRed & '" source=dhcp', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
		While 1
			Sleep(100)
			$line = StdoutRead($consola)
			If StringLen($line)>0 Then
				If StringInStr($line,"Aceptar")<>0 Then 
					$ConfiguracionRed[0][0]=1
					$ConfiguracionRed[0][1]=$line
					ExitLoop
				Else
					$ConfiguracionRed[0][0]=0
					$ConfiguracionRed[0][1]=$line
					ExitLoop
				EndIf
			EndIf
		Wend
		
		
		$consola=Run(@ComSpec & ' /c netsh interface ip set dns "' & $NombreRed & '" dhcp', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
		While 1
			Sleep(100)
			$line2 = StdoutRead($consola)
			If StringLen($line2)>0 Then
				If StringInStr($line2,"Aceptar")<>0 Then 
					$ConfiguracionRed[1][0]=0
					$ConfiguracionRed[1][1]=$line2
					ExitLoop
				Else
					$ConfiguracionRed[1][0]=0
					$ConfiguracionRed[1][1]=$line2
					ExitLoop
				EndIf
			EndIf
		Wend
	
	Else
		
		Local $consola=Run(@ComSpec & ' /c netsh interface ip set address name="' & $NombreRed & '" source=dhcp', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
		While 1
			Sleep(100)
			$line = StdoutRead($consola)
			If StringLen($line)>0 Then
				If StringInStr($line,"Aceptar")<>0 Then 
					$ConfiguracionRed[0][0]=1
					$ConfiguracionRed[0][1]=$line
					ExitLoop
				Else
					$ConfiguracionRed[0][0]=0
					$ConfiguracionRed[0][1]=$line
					ExitLoop
				EndIf
			EndIf
		Wend

		If $DNS1<>"" Then
			$consola=Run(@ComSpec & ' /c netsh interface ip set dns "' & $NombreRed & '" static ' & $DNS1 & ' primary', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line2 = StdoutRead($consola)
				If StringLen($line2)>0 Then
					If StringInStr($line2,"Aceptar")<>0 Then 
						$ConfiguracionRed[1][0]=0
						$ConfiguracionRed[1][1]=$line2
						ExitLoop
					Else
						$ConfiguracionRed[1][0]=0
						$ConfiguracionRed[1][1]=$line2
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[1][0]=-1
			$ConfiguracionRed[1][1]="No se ha cambiado la dirección DNS primaria"
		EndIf
			
		If $DNS2<>"" Then
			$consola=Run(@ComSpec & ' /c netsh interface ip add dns "' & $NombreRed & '" static addr=' & $DNS2 & ' index=2', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
			While 1
				Sleep(100)
				$line3 = StdoutRead($consola)
				If StringLen($line3)>0 Then
					If StringInStr($line3,"Aceptar")<>0 Then 
						$ConfiguracionRed[2][0]=0
						$ConfiguracionRed[2][1]=$line3
						ExitLoop
					Else
						$ConfiguracionRed[2][0]=0
						$ConfiguracionRed[2][1]=$line2
						ExitLoop
					EndIf
				EndIf
			Wend
		Else
			$ConfiguracionRed[2][0]=-1
			$ConfiguracionRed[2][1]="No se ha cambiado la dirección DNS secundaria"
		EndIf

	EndIf
	Return $ConfiguracionRed	
EndFunc

#cs ***********************************************************************************************************
Nombre función: NombreRedActiva
Descripción: Devuelve el nombre de la red activa.Si no encuentra ninguna red activa, devuelve 0.
Parámetros: Ninguno.
Autor: Chefito
Otros: Como siempre, código totalmente libre ;). Se puede mejorar lo que se quiera. Se agradecería nombrar en
el código al autor.
#ce ***********************************************************************************************************

Func NombreRedActiva()
	Local $posicion=0
	$consola=Run(@ComSpec & ' /c ipconfig', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
	While 1
		Sleep(100)
		$line2 = $line2 & StdoutRead($consola)
		If @error Then ExitLoop
	Wend
	Do
		$posicionIni=$posicion+19
		$posicion=StringInStr($line2,"Adaptador Ethernet",0,1,$posicionIni) 
	Until $posicion=0
	If $posicionIni<>0 Then
			$posFin=StringInStr($line2,":",0,1,$posicionIni)-10
			Return StringMid($line2,$posicionIni,$posFin-$posicionIni)
	Else
			Return 0
	EndIf
EndFunc

Func OnAutoItExit()	;graba los datos de la lista en un fichero antes de salirse del programa
	$file = FileOpen(@ScriptDir& "\datos.dat", 2)
	FileWrite($file,$textoList)
	FileClose($file)
EndFunc

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)	;si das doble click en un item de la lista, se ponen en sus respectivos controles
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($listaRed) Then $hWndListBox = GUICtrlGetHandle($listaRed)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word

    Switch $hWndFrom
        Case $listaRed, $hWndListBox
            Switch $iCode
				Case $LBN_DBLCLK ; Sent when the user double-clicks a string in a list box
					$listindex=_GUICtrlListBox_GetCurSel($listaRed)
					$matrizArchivo=_GUICtrlListBox_GetText($listaRed,$listindex)
					$matriz=StringSplit($matrizArchivo," --> ",1)
					GUICtrlSetData($NombreRed,$matriz[1])
					_GUICtrlIpAddress_Set($IP,$matriz[2])
					_GUICtrlIpAddress_Set($Mascara,$matriz[3])
					_GUICtrlIpAddress_Set($Puerta,$matriz[4])
					_GUICtrlIpAddress_Set($DNS1,$matriz[5])
					_GUICtrlIpAddress_Set($DNS2,$matriz[6])
			EndSwitch
		EndSwitch
      Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

No las he probado mucho. Seguramente tenga algún que otro fallo. Si encuentran algún error, por favor, comentenlo.
Tampoco las he depurado al 100%.
Espero que os gusten.

Saludos :smt026 .

Re: Funciones Configuración Red y Saber nombre Red activa

Publicado: 08 Feb 2009, 22:02
por gna08
buen script, vamos a probar, es necesario reiniciar para relizar los cambbios? gracias :smt006

Re: Funciones Configuración Red y Saber nombre Red activa

Publicado: 08 Feb 2009, 22:08
por Chefito
gna08 escribió:es necesario reiniciar para relizar los cambbios?
Yo tengo XP, y se actualiza sin necesidad de reiniciar. Aunque tarda unos pocos segundos (yo diría que unos 15 o 20).

Saludos.