[DUDA] Se puede poner un "botón" en batch

Iniciado por MDd2, 20 Febrero 2017, 22:41 PM

0 Miembros y 1 Visitante están viendo este tema.

MDd2

Hola, muy buenas.
Estoy haciendo un trabajo para el instituto, sobre biología, pero pero para subir nota he creado un "programilla" en batch; el primer lenguaje que aprendí, bueno no os voy a contar mi vida...  :xD :xD 
La pregunta es si puedo hacer que al clickear sobre un texto, o algo, ejecute un comando. Más o menos como un botón.

No se si es posible.

Gracias de antemano.
# "No temo a los ordenadores; lo que temo es quedarme sin ellos"
-- Isaac Asimov

z3nth10n

En todo caso si podrías hacerlo con VBScript bajo wscript que es la versión gráfica de este. Luego está csscript que es la versión de consola VBscript, pero vamos, que lo que te interesa es llamar a un batch desde vbscript o hacerlo todo en vbscript.

Un saludo.

Interesados hablad por Discord.

Eleкtro

#2
Cita de: MDd2 en 20 Febrero 2017, 22:41 PMNo se si es posible.

No, no es posible con Batch. Es un lenguaje bastante primitivo que en la mayoría de escenarios ni tan siquiera se le puede considerar un lenguaje de programación, es más bien una herramienta limitada (muy limitada) para principiantes. Lo cierto es que más bien es un lenguaje enfocado a la automatización de tareas básicas de un usuaro normal y corriente, así que no le pidas mucho más al pobre Batch...

Como alternativa puedes construir una intefáz gráfica usando el lenguaje WinBatch, que se caracteriza por usar una mezcla de sintaxis entre Batch y VisualBasic Script.

Pero en mi opinión lo mejor es que si realmente necesitas hacer cosas extravagantes como esta entonces te vayas olvidando de Batch y optes por un lenguaje de alto nivel que te permita llevar a cabo este tipo de tarea de una forma encapsulada y abstracta, como por ejemplo C# o VB.NET. Eso sería una opción genial, ya que con los miembros del espacio de nombres System.Console puedes determinar la posición de la celda actual que se encuentra activa en el buffer de la consola, y con eso podrías intentar empezar a evaluar si se hizo click sobre una celda específica despues de haber obtenido la posición actual del mouse relativa a la ventana de la consola. En un principio suena tedioso, y debe serlo, ya que tienes que averiguar la longitud del texto y la posición actual dentro del buffer de salida de la consola, y también si ese texto está visible o no en el buffer, etc, pero con eso que te he dicho consigues obtener practicamente toda la información necesaría.

¡Un saludo!.




EDITO:

Cita de: Ikillnukes en 20 Febrero 2017, 22:58 PMEn todo caso si podrías hacerlo con VBScript bajo wscript que es la versión gráfica de este.

No, ojo con las cosas que das por asumido. WScript.exe solamente es un intérprete para evaluar código de VisualBasic Script (o VBS) y JScript (o javascript for Windows) entre otros varios (vease la lista de motores de lenguajes soportados por Windows Script Host en la Wikipedia) que corran en modo gráfico (o GUI). Y CScript.exe es la versión del intérprete en modo consola (o CLI), pero esta diferencia entre que exista una versión en modo GUI y otra en modo CLI no significa que con VBS por si solo puedas construir una GUI, pues VBS no provee absolutamente ningún control, ni CheckBoxes ni ListBoxes, ni nada de nada... solamente un "InputBox" y la capacidad para mostrar MessageBoxes.

Dicho esto, cabe mencionar que en VBS se puede instanciar el objeto COM InternetExplorer.Application para desarrollar una especie de GUI, pero esto es un procedimiento que genera un código resultante bastante engorroso y es una pérdida de tiempo por que basicamente lo que se está cosntruyendo es una aplicación HTML (puesto que se están consumiendo los controles que provee IE), y para ello hay una manera más sofisticada y más llevadera de construir ese tipo de GUI, lo cual daría como resultado un archivo con extensión .hta que puedes correr con el intérprete mshta.exe.




Ejemplo de una GUI HTA:

Script.hta
Código (html4strict) [Seleccionar]
<head>
<title>HTA Test</title>
<HTA:APPLICATION
    APPLICATIONNAME="HTA Test"
    SCROLL="yes"
    SINGLEINSTANCE="yes"
    WINDOWSTATE="maximize"
>
</head>

<script language="VBScript">
   Sub TestSub
       Msgbox "Testing 1-2-3."
   End Sub
</script>

<body>
<input type="button" value="Run Script" name="run_button"  onClick="TestSub"><p>

</body>

Referencia al autor: https://technet.microsoft.com/en-us/library/ee692768.aspx

Ejemplo de una GUI VBS:

Script.vbs
Código (vb) [Seleccionar]
Option Explicit
Dim aOpt(4)
aOpt(0) = "Option 1"
aOpt(1) = "Option 2"
aOpt(2) = "Option 3"
aOpt(3) = "Option 4"
aOpt(4) = "Option 5"
wsh.echo "You selected:", SelectBox("Select an option", aOpt)

Function SelectBox(sTitle, aOptions)
Dim oIE, s, item
 set oIE = CreateObject("InternetExplorer.Application")
 With oIE
   .ToolBar   = False : .RegisterAsDropTarget = False
   .StatusBar = False : .Navigate("about:blank")
   While .Busy : WScript.Sleep 100 : Wend
   With .document
     With .parentWindow
       if Instr(.navigator.appVersion, "MSIE 6") > 0 Then
         oIE.FullScreen = True
       End if
       oIE.width = 400 : oIE.height = 150
       oIE.left = .screen.width \ 2 - 200
       oIE.top  = .screen.height\ 2 - 75
     End With ' ParentWindow
     s = "<html><head><title>" & sTitle & " " & String(80, ".") _
       & "</title></head><script language=vbs>bWait=true</script>" _
       & "<body bgColor=Silver><center><b>" & sTitle & "<b><p>" _
       & "<select id=entries size=1 style='width:250px'>" _
       & "  <option selected>" & sTitle & "</option>"
     For each item in aOptions
       s = s & "  <option>" & item & "</option>"
     Next
     s = s & "  </select><p>" _
       & "<button id=but0 onclick='bWait=false'>OK</button>" _
       & "</center></body></html>"
     .WriteLn(s)
     With .body
       .scroll="no"
       .style.borderStyle = "outset"
       .style.borderWidth = "3px"
     End With ' Body
     .all.entries.focus
     oIE.Visible = True
     On Error Resume Next
     While .ParentWindow.bWait
       WScript.Sleep 100
       if oIE.Visible Then SelectBox = "Aborted"
       if Err Then Exit Function
     Wend ' Wait
     On Error Goto 0
     With .ParentWindow.entries
       SelectBox = .options(.selectedIndex).text
     End With
   End With ' document
   .Visible = False
 End With   ' IE
End Function

Referencia al autor: https://social.technet.microsoft.com/Forums/scriptcenter/en-US/63802c32-fec3-4d83-8036-b37f46d3fe75/gui-for-vbs?forum=ITCG

¡Saludos!








z3nth10n

Cierto es Elektro, me muerdo la lengua.

Entonces, lo que a este usuario le interesa es hacer algo en HTA, que suerte estar bajo Windows, con un notepad te puedes hacer un programa sencillo.

Un saludo.

Interesados hablad por Discord.

Eleкtro

Cita de: Ikillnukes en 22 Febrero 2017, 10:26 AMcon un notepad te puedes hacer un programa sencillo.

Desde un buscaminas hasta un ARK si te pones una tardecita entera ...¿he!!?. :rolleyes:








z3nth10n

Cita de: Eleкtro en 22 Febrero 2017, 11:07 AM
Desde un buscaminas hasta un ARK si te pones una tardecita entera ...¿he!!?. :rolleyes:

Ups :-[ :-[ JAJAJAJAJAJAJA y un fabricador de billetes que tal? :xD Hay optimizarle el garbage collector y aumentarle el heap size :laugh: :laugh: :laugh:

;D ;D ;D ;D ;D ;D :xD :xD

Interesados hablad por Discord.