
Este artículo muestra cómo añadir una ventana de consola a nuestra aplicación, escribir en ella y ejecutar otra aplicación en ella.
Si una aplicación VB es arrancada desde una aplicación de consola, el sistema operativo la saca automáticamente de la consola, impidiendo a la aplicación interactuar con ella.
Este artículo no da un método para evitar esto pero muestra cómo crear una nueva ventana de consola con la que puede interactuar nuestra aplicación. También muestra cómo ejecutar una aplicación de consola (un fichero bat en este caso) desde VB en la consola creada.
EJEMPLO PASO A PASO
1 - Creamos un fichero llamado c:\test.bat con el comando dir /w
2 - Creamos un nuevo proyecto con un formulario y un módulo
3 - Declaramos en el módulo :
Declare Function AllocConsole Lib "kernel32" () As Long
Declare Function FreeConsole Lib "kernel32" () As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" _
(ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal nNumberOfCharsToWrite _
As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long
Public Const STD_OUTPUT_HANDLE = -11&
4 - Añadimos un CommandButton al formulario y escribimos el siguiente código :
En la sección de declaraciones del formulario :
Dim hConsole As Long
En el Command1_Click :
Dim Result As Long, sOut As String, cWritten As Long
sOut = "Hi There" & vbCrLf
Result = WriteConsole(hConsole, ByVal sOut, Len(sOut), cWritten,ByVal 0&)
Shell "C:\TEST.BAT"
En el Form_Load :
If AllocConsole() Then
hConsole = GetStdHandle(STD_OUTPUT_HANDLE)
If hConsole = 0 Then MsgBox "Couldn't allocate STDOUT"
Else
MsgBox "Couldn't allocate console"
End If
En el Form_Unload :
CloseHandle hConsole
FreeConsole
5 - Ejecutamos la aplicación y nos aparece una consola en blanco.
6 - Pulsamos en el botón. Tanto el texto en sOut como la salida del bat nos aparecen en la consola.
7 - Cerramos el formulario. La consola se cerrará.
NOTAS :
1 : Si ejecutas otra aplicación en la consola, ésta se ejecuta asíncronamente. La salida de las dos aplicaciones puede mezclarse.
2 : Si la aplicación de la consola no acaba antes de que se cierre tu aplicación VB, la consola permanecerá abierta.
3 : Si cierras la consola, el ejecutable Visual Basic terminará. Si estás en el IDE de VB, se cerrará el VB y se puede colgar la consola. Usa el administrador de tareas para cerrarla.

