He hecho un pequeño script que utilizo en el trabajo para conseguir información de las máquinas. Mi duda es que me gustaría que la ventana donde se introduce el nombre de usuario y contraseña no se cerrase a no ser que yo mismo la cerrase y no se como hacerlo. ¿Alguien tiene alguna idea? También os animo por si alguno tiene alguna idea de como mejorar el script.
Un saludo y gracias.
Código: Seleccionar todo
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
$strUser = "administrador" ;Declaramos el usuario administrador para la conexión.
;VENTANA GRÁFICA
;===============
$mainwindow = GUICreate("Consulta HW v.1.1", 400, 400)
;IP NOMBRE DE EQUIPO
GUICtrlCreateLabel("Introduce IP / Nombre Equipo", 10, 30)
$strcomputer = GUICtrlCreateInput("", 200, 30, 150, 20)
;CONTRASEÑA ADMINISTRADOR
GUICtrlCreateLabel("Contraseña Admin Local", 10, 70)
$strPassword = GUICtrlCreateInput("", 200, 70, 150, 20, $ES_PASSWORD)
;BOTÓN CONECTAR
$Conectar = GUICtrlCreateButton("Conectar", 165, 120)
;PIE PROGRAMA
GUICtrlCreateLabel("Dpto. Sistemas HW 2012", 100, 370)
GUISwitch($mainwindow)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg(1)
Select
Case $msg[0] = $Conectar
If Guictrlread($strcomputer) = "" Or Guictrlread($strPassword) = "" Then
Msgbox(0, "Error", "Datos incompletos para la consulta")
Else
;Msgbox(0,"hola",Guictrlread($pass))
;MsgBox(4096, "Este es el resultado de pulsar Salir", GUICtrlRead($datos))
;ExitLoop
$strcomputer = Guictrlread($strcomputer)
$strPassword = Guictrlread($strPassword)
$Ping = Ping($strComputer,500)
If $Ping = "0" Then
Msgbox(0,"Dpto. Sistemas HW", ".............................................................................................................................." & _
@CRLF & "El equipo " & $strComputer & " está: DESCONECTADO" & _
@CRLF & ".............................................................................................................................." & _
@CRLF & "[email protected]")
Else
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ;Activamos la opción de detectar errores COM - Prueba de contraseña 1/2
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)
;COMENZAMOS A REALIZAR CONSULTAS
;===============================
$colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For $obj in $colItems
$Userlog = $obj.UserName ;usuario logado actualmente
$Sisname = $obj.Name ;nombre del equipo
$ModEquipo = $obj.Model ;modelo del equipo
Next
$colItems = $objWMIService.ExecQuery("Select * from Win32_BIOS")
For $obj in $colItems
$Numseri = $obj.SerialNumber ;Obtenemos el numero de serie del equipo
Next
;CONSULTA EQUIVALENCIAS DE NÚMERO DE SERIE
Select
Case $ModEquipo = "0833W7L"
$ModEquipo = "ThinkCentre M70e - 0833W7L"
Case $ModEquipo = "0833W84"
$ModEquipo = "ThinkCentre M70e - 0833W84"
Case $ModEquipo = "253729G"
$ModEquipo = "ThinkPad T410 - 253729G"
Case $ModEquipo = "423663G"
$ModEquipo = "ThinkPad T420 - 423663G"
Case $ModEquipo = "4835152"
$ModEquipo = "Kiosco"
Case $ModEquipo = "48XXXXX"
$ModEquipo = "Kiosco"
Case $ModEquipo = "7360WCV"
$ModEquipo = "ThinkCentre M58 - 7360WCV"
Case $ModEquipo = "7627A81"
$ModEquipo = "ThinkCentre M58 - 7627A81"
Case $ModEquipo = "7844H9G"
$ModEquipo = "ThinkCentre A70 - 7844H9G"
Case $ModEquipo = "7844M5G"
$ModEquipo = "ThinkCentre A70 - 7844M5G"
Case $ModEquipo = "3176RT6"
$ModEquipo = "ThinkCentre M71e - 3176RT6"
EndSelect
;CONSULTA DATOS DEL SISTEMA
$colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For $obj in $colItems
$SistOp = $obj.Caption ;Obtenemos Sistema Operativo
$SisVer = $obj.Version ;Obtenemos la Arquitectura del Sistema Operativo
If $SisVer = "6.1.7600" Then
For $obj in $colItems
$SisArq = $obj.OSArchitecture
Next
ElseIf $SisVer = "6.1.7601" Then
For $obj in $colItems
$SisArq = $obj.OSArchitecture
Next
Else
$SisArq = " 32 bits"
EndIf
$SisServ = $obj.CSDVersion ;Obtenemos Service Pack
Next
If $SisServ <> "" Then ;Correccion Service Pack
$SisServ = " - " & $SisServ
EndIf
;CONSULTA MEMORIA INSTALADA EN EL EQUIPO
$i = "1"
$strMemory = ""
$colItems = $objWMIService.ExecQuery("Select * from Win32_PhysicalMemory")
For $obj In $colItems
$strMemory = $strMemory & "Slot" & $i & " : " & ($obj.Capacity / "1048576") & " Mb" & @CRLF
$i = $i + "1"
Next
$colItems = $objWMIService.ExecQuery("Select * from Win32_PhysicalMemoryArray")
For $obj in $colItems
$totalSlots = $obj.MemoryDevices
Next
$installedModules = $i - "1"
;CONSULTA ESPACIO DISCO
$colItems = $objWMIService.ExecQuery("select * from Win32_LogicalDisk where Name = 'c:'")
For $obj in $colItems
$tdisco = $obj.Size
$freedisco = $obj.FreeSpace
Next
$tdisco = Round($tdisco / 1048576000) & " GB"
$freedisco = Round($freedisco / 1048576000) & " GB"
;PRESENTACIÓN DE LOS DATOS
Msgbox(0,"Dpto. Sistemas HW 2012", ".................................................................................................." & _
@CRLF & _
@CRLF & "Nombre del Equipo: " & $Sisname & _
@CRLF & "Estado de Red: CONECTADO" & _
@CRLF & "IP del Equipo: " & @IPAddress1 & _
@CRLF & "Modelo del Equipo: " & $ModEquipo & _
@CRLF & "Número de Serie: " & $Numseri & _
@CRLF & "Sistema Operativo: " & $SistOp & $SisArq & $SisServ & _
@CRLF & "Usuario Logado: " & $UserLog & _
@CRLF & _
@CRLF & "Memoria Instalada en la Máquina: " & _
@CRLF & "Slots Totales: " & $totalSlots & _
@CRLF & "Slots Libres: " & ($totalSlots - $installedModules) & _
@CRLF & _
$strMemory & _
@CRLF & "Disco Duro:" & _
@CRLF & "Tamaño Disco Duro Principal: " & $tdisco & _
@CRLF & "Espacio Libre Disco Duro Principal: " & $freedisco & _
@CRLF & @CRLF & ".................................................................................................." & _
@CRLF & "por [email protected]")
EndIf ;Este cierra la consulta del ping
GUIDelete()
Func MyErrFunc() ;Devuelve un mensaje de error - Prueba de contraseña 2/2
MsgBox(0,"Dpto. Sistemas HW 2012","Vuelva a intentarlo introduciendo la contraseña de nuevo, si vuelve a fallar, contacte con el Dpto. de Sistemas.")
Local $err = $oMyError.number
If $err = 0 Then $err = -1
$g_eventerror = $err ; to check for after this function returns
Exit
Endfunc
ExitLoop
EndIf ; Este cierra la comprobación de que haya texto en nombre de usuario y contraseña
Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $mainwindow
ExitLoop
EndSelect
WEnd