- Introduccion
- Manos a la obra
- Salida
- Entrada
- Finalizando
- Ejemplo
- Despedida
Introduccion:
Todo el mundo sabe que una aplicacion de consola es una aplicacion que se muestra desde la linea de comandos (CMD.exe,Command Prompt...).
Una captura para que quede aun mas claro:
Manos a la obra:
En este manual, como es nivel 'intermedio', explicare el uso de In/Out (Entrada/Salida) usando FSO (FileSystemObject). Envez de usando las APIs, seguramente saque de aqui un tiempo una clase para hacerlo usando APIs.
La funciones esta perfectamente comentadas para que no haya ningunas dudas
Salida:
Aqui esta la funcion para enviar algo a nuestra consola:
Código
Public Function SendCMD(ByVal sData As String) As Boolean 'Si hay algun error devuelve False, si todo ha ido bien devuelve True On Error GoTo Fallo Dim FSO As Object Dim sOut As Object 'Cargamos los objectos Set FSO = CreateObject("Scripting.FileSystemObject") Set sOut = FSO.GetStandardStream(1) ' StdOut = 1 'Llamamos a la funcion que envia la informacion Call sOut.WriteLine(sData) 'Descargamos los objetos Set sOut = Nothing Set FSO = Nothing 'Devolvemos True, todo ha ido bien SendCMD = True 'Salimos de la funcion Exit Function Fallo: 'Algo fallo, devolvemos False SendCMD = False End Function
Entrada:
Esta funcion obtiene los datos que hay en nuestro Command Prompt
Código
Public Function GetCMD(Optional ByVal ReadLine As Boolean = False, Optional ByVal Caracteres As Long = 0) As String Dim FSO As Object Dim sIn As Object 'Cargamos los objectos Set FSO = CreateObject("Scripting.FileSystemObject") Set sIn = FSO.GetStandardStream(0) ' StdIn = 0 If ReadLine = False Then 'Si no queremos la ultima linea If Caracteres = 0 Then 'Si lo queremos todo GetCMD = sIn.ReadAll Else 'Si solo queremos los ultimos n Caracteres GetCMD = sIn.Read(Caracteres) End If Else 'Si queremos solo la ultima linea GetCMD = sIn.ReadLine End If 'Descargamos los objetos Set sIn = Nothing Set FSO = Nothing End Function
Finalizando:
Una vez hemos codeado nuestra aplicacion y esta terminada del todo hemos de compilarla de forma normal. Pero para que se puede ejecutar desde el CMD.exe hemos de modificar el ejecutable, para hacerlo nos serviremos de este comando del LINK.exe:
Código:
LINK /EDIT /SUBSYSTEM:CONSOLE <Ruta Ejecutable>
He hecho un diminuto script VBS para que al arrastrar nuestro ejecutable lo transforme en Command Prompt compatible aqui esta, para usarlo habeis de guardarlo con el bloc de notas en formato *.vbs y arrastrar el ejecutable que querais modificar.
Código:
Dim StrLINK ,StrEXE ,WSHShell
'Ruta del LINK.exe de la carpeta VB
StrLINK = """C:\Archivos de programa\Microsoft Visual Studio\VB98\LINK.EXE"""
'Ruta del ejecutable que arrastras
StrEXE = """" & WScript.Arguments(0) & """"
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run StrLINK & " /EDIT /SUBSYSTEM:CONSOLE " & StrEXE , 0
Set WSHShell = Nothing
WScript.Echo "Finalizado!!"
Una vez nuestro ejecutable ya ha sido editado para que se ejecute por linea de comandos ya podra ser utilizado .
Ejemplo:
Este es un codigo de ejemplo de una calculadora (Tambien lo adjunto al Post)
En un formulario:
Código:
Option Explicit
Private Sub Form_Load()
Dim Numero1 As Long
Dim Numero2 As Long
Dim Operacion As String
Dim Resultado As Double
'Para que no se vea la ventana
Form1.Visible = False
'Pedimos el primer numero
Call SendCMD("Introduce el primer numero:")
'Lo obtenemos
Numero1 = GetCMD(True)
'Pedimos el segundo
Call SendCMD("Introduce el segundo numero:")
'Lo obtenemos
Numero2 = GetCMD(True)
'Pedimos la operacion
Call SendCMD("Introduce la operacion:" & vbCrLf & " + para suma" & vbCrLf & " - para resta" & vbCrLf & " * para multiplicacion" & vbCrLf & " / para division")
'La obtenemos
Operacion = GetCMD(False, 1)
'Hacemos la operacion
Select Case Operacion
Case "+"
Resultado = Numero1 + Numero2
Case "-"
Resultado = Numero1 - Numero2
Case "*"
Resultado = Numero1 * Numero2
Case "/"
Resultado = Numero1 / Numero2
End Select
'Devolvemos el resultado
Call SendCMD(Resultado & vbCrLf)
End
End Sub
Public Function SendCMD(ByVal sData As String) As Boolean
'Si hay algun error devuelve False, si todo ha ido bien devuelve True
On Error GoTo Fallo
Dim FSO As Object
Dim sOut As Object
'Cargamos los objectos
Set FSO = CreateObject("Scripting.FileSystemObject")
Set sOut = FSO.GetStandardStream(1) ' StdOut = 1
'Llamamos a la funcion que envia la informacion
Call sOut.WriteLine(sData)
'Descargamos los objetos
Set sOut = Nothing
Set FSO = Nothing
'Devolvemos True, todo ha ido bien
SendCMD = True
'Salimos de la funcion
Exit Function
Fallo:
'Algo fallo, devolvemos False
SendCMD = False
End Function
Public Function GetCMD(Optional ByVal ReadLine As Boolean = False, Optional ByVal Caracteres As Long = 0) As String
Dim FSO As Object
Dim sIn As Object
'Cargamos los objectos
Set FSO = CreateObject("Scripting.FileSystemObject")
Set sIn = FSO.GetStandardStream(0) ' StdIn = 0
If ReadLine = False Then
'Si no queremos la ultima linea
If Caracteres = 0 Then
'Si lo queremos todo
GetCMD = sIn.ReadAll
Else
'Si solo queremos los ultimos n Caracteres
GetCMD = sIn.Read(Caracteres)
End If
Else
'Si queremos solo la ultima linea
GetCMD = sIn.ReadLine
End If
'Descargamos los objetos
Set sIn = Nothing
Set FSO = Nothing
End Function
Despedida:
Bueno, ya esta todo explicado , cualquier duda avisen .
De aqui un tiempo sacare una clase que permitira hacer esto, pero con APIs, ademas de permitir cambiar el color al texto y otras cosas .
Saludos , espero que hayan aprendido mucho
Pueden distribuirlo libremente siempre que pongan la fuente y el autor, yo, Karcrack.