Leer STDout del CMD en tiempo real y ocultarla.

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
Hola buenas, haber si me podeis echar una mano con algo que llevo entre manos desde hace tiempo.
Lo que quiero es básicamente ejecutar un programa a través de un CMD y leer el stdout en tiempo real mientras la APP está en ejecución y a la vez ocultarlo. Hace un tiempo pregunté en el foro del AMS lo mismo y pabloko me echo una mano pero no quedó como yo quería, ya que aparte de que no se programar en ese lenguaje las opciones que me dan no son 100% válidas.

Bueno al grano, el plugin que uso para ello es el Luacom y los códigos son estos:
1:
wscript=luacom.CreateObject("WScript.Shell") 
kall=wscript:Exec("C:\\test.cmd")
2:
wscript=luacom.CreateObject("WScript.Shell") 
kall=wscript:Run("C:\\test.cmd", 0)
NOTA: lo que hay entre el wscript y el Exec o Run son dos puntos ":", que no se porque sale así

Bueno con uno consigo una cosa y con otro la otra pero no las dos a la vez.

El número 1 hace que pueda leer el stdout pero no me permite ocultar la ventana, se queda el cuadrado negro y feo ese...

El número 2 hacer que se pueda ocultar la fea ventana negra pero no permite leer el stdout.

Hay otra opción que es buscar la ventana y ocultarla con Window.Hide, pero sigue quedando feo ya que sale la ventana negra y después se esconde...
Una última opción que he probado es usar el :Run y direccionar la salida a un txt con "> C:\temp.txt" que funcionó perfectamente con "ping" pero casualmente los programas que quiero usar no funcionan.

El archivo de texto lo leo con:
local f = assert(io.open("C:\\temp.txt", "r"))
local t = f:read("*all")
ya que con "TextFile.ReadToString" dice que está en uso.

Haber si alguien me puede echar una mano con mi dilema...

Gracias anticipadas y saludos.
Vale, el wscript tiene sus propias funciones de lectura (tanto línea por línea como toda la salida):
local wscript=luacom.CreateObject("WScript.Shell");
local kall=wscript : Exec("C:\\test.bat");
while kall.Status == 0 do
end
Dialog.Message("", kall.StdOut:ReadAll()) ---Prints all the output
Para línea por línea es:
--You can print line by line with this function:
kall.StdOut:ReadLine())
A mi no se me abre ninguna ventanita negra con el Exec
Gracias webultra, si eso ya lo había hecho lo que pasa es que con el código que me has puesto no oculta la ventana y si cambias el Exec por un Run no lee el stdout que es a lo que me refiero.
que complicacion, aun me acuerdo cuando hice ese script en el foro de ir...

nose con el tiempo he ido viendo que hay formas mucho mas faciles de hacerlo, por ejemplo este software en vb6 que emula a una consola, http://www.nirsoft.net/vb/console.html , luego por la noche si tenngo un rato extraigo la parte de que hace el stdin y el stdout y la compilo en una dll para usarla y nos quitamos de historias con el puto wshell, yo por lo que tenia entendido run abria la ventana y exec no, de todas formas, podria tratar de modificar mi plugin runsilent para que lo haga

luego vemos algo
Okis muchas gracias compi, tu como siempre ahí para ayudar.

El Exec abre siempre la ventanita, sin embargo el Run le pones un 0 en modo de ventana y lo oculta tipo:

wscript:Run("C:\\test.cmd", modoventana, esperar)

Saludos.
¬¬'? ...buscando otro plugin recordé el plugin llamado commandline. Hace exactamente lo que buscas y retorna todo en una tabla. Aca un ejemplo:
local result = CommandLine.Execute("ping localhost", 0);
Dialog.Message("", ptbl(result));
Usa mi función para imprimir el contenido de la tabla.
Ya, si ese lo conozco lo que pasa es que no lo hace en tiempo real, lo hace una vez terminado y por lo tanto no me vale muy bien para mi propósito ya que quiero hacer que mi programa detecte el % completado en el comando y si uso el CommandLine siempre me devolvería los datos al cerrar el programa y por lo tanto cuando ha terminado.

Aún así gracias por la respuesta ;)
Trata de mirar el código del plugin y lo modificas ;)
Voy a probar a ver... no había caído en que a lo mejor se podía desempaquetar...
Alguien sabe como desempaquetar los plugins?? es que he probado con el Extractor y no lo abre, después he probado con el Resource Hacker y me dice que probablemente este comprimido, y he probado con el UPX y nada, despues he probado con el 7-Zip y me reconoce el contenido pero no extrae nada, dice que está corrupto.
Vaya, por lo que he leído bien podrías crearte un subproceso que envía la información al stdout pero todo esto a través de llamar alguna que otra librería. Te dejo el artículo que contiene la información. Por cierto, éste método es el que utiliza el download plugin para crear subprocesos que no inhiben la aplicación.

http://msdn.microsoft.com/en-us/library ... s.85).aspx
una $ y te digo
si te itneresa mandame pm