vbs script para hacer ejemplos ejecutar descargar como codigos broma vbscript

para - ¿Cómo crear diálogo de opciones con VbScript?



vbscript descargar (7)

Pruebe WshShell.Popup . Dependiendo de sus datos que pueden funcionar para usted ...

De lo contrario, podría investigar PowerShell.

Tengo una aplicación de terceros que invoca un archivo vsbscript para ciertas operaciones. Me gustaría poner un aviso del usuario con una opción de opciones, ya sea una lista desplegable o casilla de verificación o algo así. Sin embargo, todo lo que puedo encontrar es la opción del cuadro de entrada.

No creo que las HTA sean una opción en mi caso (a menos que haya una forma de llamarlas desde un archivo .vbs).

Mi otro pensamiento era algún tipo de control ActiveX, pero no puedo encontrar uno integrado que estaría disponible de forma predeterminada en Windows XP / Vista.

¿Alguien tiene alguna idea sobre cómo podría lograr esto?


La respuesta simple es, realmente no puedes. La solución de Tmdean es la única forma en que puedo pensar. Dicho eso, puedes arreglar el cuadro de entrada para que no se vea horrible . Dale una carrera, no creo que sea un fracaso épico :

Dim bullet Dim response bullet = Chr(10) & " " & Chr(149) & " " Do response = InputBox("Please enter the number that corresponds to your selection:" & Chr(10) & bullet & "1.) Apple" & bullet & "2.) Bannana" & bullet & "3.) Pear" & Chr(10), "Select Thing") If response = "" Then WScript.Quit ''Detect Cancel If IsNumeric(response) Then Exit Do ''Detect value response. MsgBox "You must enter a numeric value.", 48, "Invalid Entry" Loop MsgBox "The user chose :" & response, 64, "Yay!"


Una opción es guiar Internet Explorer. Puede utilizar VBScript para iniciar IE y cargar un archivo HTML local, y adjuntar un sub archivo de VBScript al botón de envío de un formulario (o cualquier otro evento de JavaScript), que luego puede cerrar la ventana de IE como parte de su ejecución.


Puede iniciar una HTA desde un VBScript.

Set shell = CreateObject("WScript.Shell") shell.Run "Test.hta"

EDITAR

Como tiene el control total de VBScript, ¿podría hacer que VBScript de terceros simplemente llame a su HTA? Podría colocar la IU y cualquier código de procesamiento dentro de la HTA.


Si desea utilizar un hta para esto, puede hacerlo así.
El VBScript:

Set WshShell = CreateObject("WScript.Shell") ''Run the hta. WshShell.Run "Test.hta", 1, true ''Display the results. MsgBox "Return Value = " & getReturn Set WshShell = Nothing Function getReturn ''Read the registry entry created by the hta. On Error Resume Next Set WshShell = CreateObject("WScript.Shell") getReturn = WshShell.RegRead("HKEY_CURRENT_USER/Volatile Environment/MsgResp") If ERR.Number 0 Then ''If the value does not exist return -1 getReturn = -1 Else ''Otherwise return the value in the registry & delete the temperary entry. WshShell.RegDelete "HKEY_CURRENT_USER/Volatile Environment/MsgResp" End if Set WshShell = Nothing End Function

A continuación, diseñe el hta como desee e incluya los siguientes métodos

''Call this when the OK button is clicked. Sub OK_Click For Each objradiobutton In Opt If objradiobutton.Checked Then WriteResponse objradiobutton.Value End If Next window.Close End Sub ''Call this when the Cancel button is clicked. Sub Cancel_Click WriteResponse("CANCEL") window.Close End Sub ''Write the response to the registry Sub WriteResponse(strValue) Set WshShell = CreateObject("WScript.Shell") WshShell.RegWrite "HKEY_CURRENT_USER/Volatile Environment/MsgResp", strValue Set WshShell = Nothing End Sub

Utilicé un grupo de botones de opción llamados "Optar" para elegir, pero puede usar los controles que desee.

Debido a que hta no puede devolver valores, esto creará una entrada de registro temperary. Si no eres compatible con el registro, también puedes escribir el resultado en un archivo de texto temperary.

Este enfoque es bueno porque puede diseñar el hta de la manera que desee, en lugar de usar la casilla de entrada suministrada y elegir números (eso es DOS).

Esto también podría ser bueno si expandió hta para crearse a sí mismo en función de los argumentos que se le pasaron, como pasar un título, un mensaje para mostrar, una matriz de opciones, un conjunto de botones. De esta forma, podría usar el mismo hta en cualquier momento que necesite obtener información del usuario.


Puede usar DialogLib para crear formularios con listas desplegables y casillas de verificación. DialogLib todavía está en sus etapas iniciales, pero ya es bastante útil: http://www.soren.schimkat.dk/Blog/?p=189


Como ejemplo de la sugerencia de @TmDean, hay esta clase que a veces uso qué secuencias de comandos IE (bueno, el IE6 con guiones, no he probado las encarnaciones más recientes).

class IEDisplay ''~ Based on original work by Tony Hinkle, [email protected] private TEMPORARY_FOLDER private objShell private objIE private objFSO private objFolder private strName private streamOut private objDIV private numHeight private numWidth private numTop private numLeft private sub Class_Initialize() Dim strComputer Dim objWMIService Dim colItems Dim objItem Dim arrMonitors( 10, 1 ) Dim numMonitorCount Set objShell = WScript.CreateObject("WScript.Shell") Set objIE = CreateObject("InternetExplorer.Application") strComputer = "." Set objWMIService = GetObject( "winmgmts://" & strComputer & "/root/cimv2") Set colItems = objWMIService.ExecQuery( "Select * from Win32_DesktopMonitor") numMonitorCount = 0 For Each objItem in colItems arrMonitors( numMonitorCount, 0 ) = objItem.ScreenHeight arrMonitors( numMonitorCount, 1 ) = objItem.ScreenWidth numMonitorCount = numMonitorCount + 1 Next numHeight = arrMonitors( 0, 0 ) numWidth = arrMonitors( 0, 1 ) Set objFSO = CreateObject("Scripting.FileSystemObject") TEMPORARY_FOLDER = 2 set objFolder = objFSO.GetSpecialFolder( TEMPORARY_FOLDER ) strName = objFSO.BuildPath( objFolder, objFSO.GetTempName ) & ".html" WriteFileU strName, Join( Array( "<HTML><HEAD><TITLE>Information</TITLE></HEAD>", _ "<BODY SCROLL=''NO''><CENTER><FONT FACE=''arial black''> <HR COLOR=''BLACK''>", _ "<DIV id=''MakeMeAnObject''></DIV>", _ "<HR COLOR=''BLACK''></FONT></CENTER></BODY></HTML>" ), vbCRLF ), WF_CREATE numTop = 0 numLeft = 0 end sub Sub Init( strPosition ) ''NW, N, NE, W, CENTRE, E, SW, S, SE Select Case strPosition Case "NW" numTop = 0 numLeft = 0 Case "N" numTop = 0 numLeft = ( numWidth / 2 ) - 250 Case "NE" numTop = 0 numLeft = numWidth - 500 Case "W" numTop = ( numHeight / 2 ) - 55 numLeft = 0 Case "CENTRE" numTop = ( numHeight / 2 ) - 55 numLeft = ( numWidth / 2 ) - 250 Case "E" numTop = ( numHeight / 2 ) - 55 numLeft = numWidth - 500 Case "SW" numTop = numHeight - 110 numLeft = 0 Case "S" numTop = numHeight - 110 numLeft = ( numWidth / 2 ) - 250 Case "SE" numTop = numHeight - 110 numLeft = numWidth - 500 Case Else numTop = 0 numLeft = 0 End Select SetupIE( strName ) Set objDIV = objIE.Document.All("MakeMeAnObject") end sub private sub Class_Terminate() ''Close IE and delete the file objIE.Quit ''~ optionally you may want to get rid of the temp file end sub public sub Display( strMsg, numMillisec ) objDIV.InnerHTML = strMsg WScript.Sleep numMillisec end sub Private Sub SetupIE(File2Load) objIE.Navigate File2Load objIE.ToolBar = False objIE.StatusBar = False objIE.Resizable = False Do Loop While objIE.Busy objIE.Width = 500 objIE.Height = 110 objIE.Left = numLeft objIE.Top = numTop objIE.Visible = True objShell.AppActivate("Microsoft Internet Explorer") End Sub end class

aquí está la función faltante (de la publicación original) WriteFileU

Const WF_APPEND = 1 Const WF_CREATE = 2 Const WF_FOR_APPENDING = 8 Const WF_FOR_WRITING = 2 Const WF_CREATE_NONEXISTING = True Const CONST_READ = 1, CONST_WRITE = 2, CONST_APPEND = 8 Const AS_SYSTEMDEFAULT = -2, AS_UNICODE = -1, AS_ASCII = 0 Sub WriteFileU( sFilename, sContents, nMode ) Dim oStream If nMode = WF_APPEND Then Set oStream = oFSO.OpenTextFile( sFilename, WF_FOR_APPENDING, WF_CREATE_NONEXISTING, AS_UNICODE ) ElseIf nMode = WF_CREATE Then Set oStream = oFSO.OpenTextFile( sFilename, WF_FOR_WRITING, WF_CREATE_NONEXISTING, AS_UNICODE ) Else STOP End If oStream.Write sContents oStream.Close Set oStream = Nothing End Sub

y luego como un ejemplo de su uso

set i = new IEDisplay a = array("NW", "N", "NE", "W", "CENTRE", "E", "SW","S","SE") for each aa in a i.init aa i.display "Here in " & aa & " of screen", 1000 next

Ahora eso no es inmediatamente útil (especialmente si hay un montón de llamadas a mis propias rutinas de utilidad allí) pero da un marco. Al modificar qué HTML se almacena, puede agregar soporte para listboxes, etc.