REGALO SECCION - Un regalo a la seccion de VB6 por fin de año Se que faltan dos días, pero no se si voy a estar online estos dos días así que por las dudas, hace mucho que tenia que hacer un
tutorial pero por falta de tiempo y algunos otros factores no he podido terminar, así que les dejo esto, es lo básico pero al menos es algo.

- Mi Consola de comandos personal XD
Pues vi que a muchos les gusta VB6 y Batch, y les gusta mucho usarlo en VB6, hice esto, es una forma sencilla de crear una
consola de comandos tipo Cmd, pero 100 veces mejor, y ejecutar nuestros batch desde allí, dejo unos screen's:

Como verán luego, el código puede parecer largo, pero si se fijan mejor es por que lo he simplificado creando funciones para manejarlo de manera mas rápida sin complicarse mucho, por eso es un regalo

Ya que la consumbre es manejarlo todo desde un Form, pues tambien vamos a manejar la consola desde un Form (
Los que tengan mas experiencia pueden usar un Modulo he iniciar desde la Sub Main)
Como es un regalo esto es
Copy y Paste:
(No necesitamos ningún control)Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SetConsoleTitle Lib "kernel32" Alias "SetConsoleTitleA" (ByVal lpConsoleTitle As String) As Long
Private 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
Private Declare Function ReadConsole Lib "kernel32" Alias "ReadConsoleA" (ByVal hConsoleInput As Long, ByVal lpBuffer As String, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long
Private Declare Function SetConsoleTextAttribute Lib "kernel32" (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long
' Colores
Private Const BACKGROUND_BLUE = &H10
Private Const BACKGROUND_GREEN = &H20
Private Const BACKGROUND_RED = &H40
Private Const BACKGROUND_INTENSITY = &H80&
Private Const BACKGROUND_SEARCH = &H20& ' ----
Private Const FOREGROUND_INTENSITY = &H8&
Private Const FOREGROUND_SEARCH = (&H10&)
Private Const FOREGROUND_BLUE = &H1
Private Const FOREGROUND_GREEN = &H2
Private Const FOREGROUND_RED = &H4
Public Enum ColorTexto
[_ColorMin] = 0&
TextConBlack = 0&
TextConBlue = FOREGROUND_BLUE
TextConGreen = FOREGROUND_GREEN
TextConCyan = FOREGROUND_BLUE Or FOREGROUND_GREEN
TextConRed = FOREGROUND_RED
TextConMagenta = FOREGROUND_RED Or FOREGROUND_BLUE
TextConYellow = FOREGROUND_RED Or FOREGROUND_GREEN
TextConWhite = FOREGROUND_BLUE Or FOREGROUND_GREEN Or FOREGROUND_RED
TextConBlackHi = FOREGROUND_INTENSITY
TextConBluehi = FOREGROUND_BLUE Or FOREGROUND_INTENSITY
TextConCyanHi = FOREGROUND_BLUE Or FOREGROUND_GREEN Or FOREGROUND_INTENSITY
TextConGreenHi = FOREGROUND_GREEN Or FOREGROUND_INTENSITY
TextConRedHi = FOREGROUND_RED Or FOREGROUND_INTENSITY
TextConMagentaHi = FOREGROUND_RED Or FOREGROUND_BLUE Or FOREGROUND_INTENSITY
TextConYellowHi = FOREGROUND_RED Or FOREGROUND_GREEN Or FOREGROUND_INTENSITY
TextConWhiteHi = FOREGROUND_BLUE Or FOREGROUND_GREEN Or FOREGROUND_RED Or FOREGROUND_INTENSITY
[_ColorMax] = FOREGROUND_BLUE Or FOREGROUND_GREEN Or FOREGROUND_RED Or FOREGROUND_INTENSITY
End Enum
Public Enum ColorFondo
[_ColorMin] = 0&
FonConBlack = 0&
FonConBlue = BACKGROUND_BLUE
FonConGreen = BACKGROUND_GREEN
FonConCyan = BACKGROUND_BLUE Or BACKGROUND_GREEN
FonConRed = BACKGROUND_RED
FonConMagenta = BACKGROUND_RED Or BACKGROUND_BLUE
FonConYellow = BACKGROUND_RED Or BACKGROUND_GREEN
FonConWhite = BACKGROUND_BLUE Or BACKGROUND_GREEN Or BACKGROUND_RED
FonConBlackHi = BACKGROUND_INTENSITY
FonConBlueHi = BACKGROUND_BLUE Or BACKGROUND_INTENSITY
FonConCyanHi = BACKGROUND_BLUE Or BACKGROUND_GREEN Or BACKGROUND_INTENSITY
FonConGreenHi = BACKGROUND_GREEN Or BACKGROUND_INTENSITY
FonConRedHi = BACKGROUND_RED Or BACKGROUND_INTENSITY
FonConMagentaHi = BACKGROUND_RED Or BACKGROUND_BLUE Or BACKGROUND_INTENSITY
FonConYellowHi = BACKGROUND_RED Or BACKGROUND_GREEN Or BACKGROUND_INTENSITY
FonConWhiteHi = BACKGROUND_BLUE Or BACKGROUND_GREEN Or BACKGROUND_RED Or BACKGROUND_INTENSITY
[_ColorMax] = BACKGROUND_BLUE Or BACKGROUND_GREEN Or BACKGROUND_RED Or BACKGROUND_INTENSITY
End Enum
' Constantes para hacer FullScreen
Private Const CONSOLE_FULLSCREEN = 1
Private Const CONSOLE_FULLSCREEN_HARDWARE = 2
' Const para obtener el Handle
Private Const STD_OUTPUT_HANDLE = -11&
Private Const STD_INPUT_HANDLE = -10&
' Variables que contienen el handle de entrada y salida de datos
Dim StdOut As Long, StdIn As Long
Sub SubConsole()
'#########################
' Aqui colocas tu Codigo
'#########################
End Sub
Function Execute(Comando As String) As String
Dim FSO As Object
Set FSO = CreateObject("WSCript.Shell")
With FSO.Exec("Cmd.exe /c " & Comando)
Execute = .StdOut.ReadAll
End With
End Function
Function Title(Titulo As String)
SetConsoleTitle Titulo
End Function
Function SetRead() As String
Dim ZeroPos As Long
SetRead = String(255, 0)
ReadConsole StdIn, SetRead, Len(SetRead), vbNull, vbNull
ZeroPos = InStr(SetRead, Chr$(0))
If ZeroPos > 0 Then SetRead = Left$(SetRead, ZeroPos - 3)
End Function
Private Function Echo(Texto As String) As Long
Dim CWrite As Long
Call WriteConsole(StdOut, ByVal Texto, Len(Texto), CWrite, ByVal 0&)
End Function
Private Function Color(Texto As ColorTexto, Fondo As ColorFondo)
Call SetConsoleTextAttribute(StdOut, Texto Or Fondo)
End Function
Private Sub Form_Load()
Call AllocConsole ' Creamos la consola
StdOut = GetStdHandle(STD_OUTPUT_HANDLE) ' Handle de Salida
StdIn = GetStdHandle(STD_INPUT_HANDLE) ' Handle de Entrada
Call SubConsole
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call FreeConsole ' Cerrar consola
Call CloseHandle(StdOut) ' Cerramos el Handle abierto...
Call CloseHandle(StdIn) 'IDEM anterior
End Sub
De todo esto lo único que nos interesa para manejar la consola es esta parte:
Sub SubConsole()
'#########################
' Aqui colocas tu Codigo
'#########################
End Sub
Simplemente borramos los comentarios

- Explicación Breve de como escribir, leer, cambiar el titulo y color de la consola.
Como ya dije, solo nos interesa el Sub
SubConsole, todo el código que escribamos tiene que ir allí dentro

, para hacer funcionar la consola disponemos de 5 funciones sencillas,
Echo que sirve para escribir en la consola,
SetRead que sirve para leer datos de la consola (
Tipo Set /p en batch),
Color que sirve para cambiar el color de Texto y Fondo usado por el texto, y
Execute que es una funcion extra para ejecutar comandos MS-DOS desde nuestra consola, como ser
Ping.
Nota:Para parar el Proyecto hacer click en la X del formulario, ya que este en el evento Form_Unload cierra la consola, si no se cierra entonces continua abierta, y esto genera algunos problemas.- Echo - Escribir en la consola
Vuelvo a repetir por si las moscas, todo el code es dentro del Sub
SubConsole:
Sub SubConsole()
'################BY 3D1#################
' [Hacking And Security] Or Programming
'#######################################
Echo "Primeros pasos en la consola" & vbNewLine
Echo "Probando..."
Echo "Sin salto de linea"
End Sub
creo que esto se entiende, la funcion se llama
Echo para mas facilidad y no tener que aprender otros nombres, mientras mas parecido a Batch mas sencillo de entender.

- Title - Titulo de la consola
Esto no hace falta de explicar, para los perdidos [
Cambia el titulo a la consola]
Sub SubConsole()
'################BY 3D1#################
' [Hacking And Security] Or Programming
'#######################################
Title "Mi Primer consola en VB6"
End Sub
- Color - Cambia el color de texto y el fondo usado por el mismo, en la consola
Esta función es especial, tiene dos parámetros, el primero es el
color de texto y el segundo es el
color de fondo usando por el mismo texto, no hice ninguna función para cambiar el color de fondo de la consola, eso se vera en un futuro manual

Sub SubConsole()
'################BY 3D1#################
' [Hacking And Security] Or Programming
'#######################################
Color TextConBlue, FonConYellowHi
Echo "Este texto es de color Azul con fondo AmarilloBlillante" & vbNewLine
Color TextConGreenHi, FonConBlue
Echo "Este texto es de color VerdeBrillante con fondo Azul"
End Sub
Esto creo que esta claro, si hay dudas solo preguntar, las constantes que terminen con
Hi son los colores brillantes

- SetRead - Pedimos que se introduzcan datos en la consola
Antes de usar la función, ¿por que hice la función existiendo
Set /p en batch?, sencillamente por que, comandos como
Edlin o
Set /p u otro que pida datos no funciona, se queda esperando a que nosotros le demos los datos, asi que por esa razon esta esta función, los comandos que solo muestran texto no representan ningún problema.
Vamos al ejemplo:
Sub SubConsole()
'################BY 3D1#################
' [Hacking And Security] Or Programming
'#######################################
Echo "Escribe tu nombre: "
MsgBox "Tu nombre es: " & SetRead
End Sub
Todo es sencillo por mas largo que se vea

- Execute - Ejecuta comandos MS-DOS y retorna los resultados
También esta función es
Extra como hay una "incompatibilidad" con la función
Shell de VB6 los comandos tardan en mostrar los resultados así que no era posible usar correctamente la función
Color y
Echo, esta función funciona junto con echo simplemente precisa de un parámetro y es el comando que va ha ejecutar, ej:
Sub SubConsole()
'################BY 3D1#################
' [Hacking And Security] Or Programming
'#######################################
Echo Execute("Ping -n 1 www.google.com")
End Sub
- Finalizando un ejemplo usando todas las funciones - [El Ej del Screen]
Colocare el código usando en el
SubConsole del Screen que coloque como veran es sencillo.
Sub SubConsole()
Title "Mi Consola de comandos By 3D1"
Color TextConBluehi, FonConGreenHi
Echo "MI CONSOLA DE COMANDOS" & String(58, Chr(32)) & vbNewLine
Color TextConWhite, FonConBlack
Echo "Ejecutando un comando MS-DOS en mi consola..:" & vbNewLine
Color TextConRedHi, FonConBlack
Echo Execute("Ping -n 1 www.google.com") & vbNewLine
Color TextConBluehi, FonConBlackHi
Echo "Escribe tu Nick:"
Color TextConWhite, FonConBlack
MsgBox SetRead
Call Form_Unload(False)
End
End Sub
- (Extra - Trucos usando la función Execute)
Esto esta demás si quieren no lo lean XD:
CLS o Clear Pues el CLS no funciona en Aqui para borrar la pantalla usamos el comando Mode
Call Execute("Mode con cols=0 lines=0")
Luego coloco mas, ahora ya estoy cansado

, espero les guste, es un regalo de mi parte por fin de año a la seccion.

SaluDOS!!!