PDA

Ver la Versión Completa : Ejecutar aplicación en segundo plano y recoger los mensajes


Angel Fernández
30-05-2004, 01:04:39
Saludos a todo el mundo. Quisiera pedir ayuda respecto a un tema que me tiene bastante ocupado últimamente. Sé que puedo ejecutar una aplicación desde Delphi con shellexecute (por ejemplo), pero ¿cómo puedo ejecutar una aplicación en segundo plano y recoger los mensajes que me va enviando? Por ejemplo: quiero ejecutar lame.exe (el codificador de mp3) en segundo plano, pero quiero mostrar en una barra el progreso y en un memo las frecuencias que va tratando. Para ello, lame.exe presenta en una pantalla DOS una información muy útil que va actualizando cada segundo. ¿Puedo recoger esta información para presentarla a mi conveniencia en un form?

Gracias a todos por vuestras respuestas.:o

jachguate
30-05-2004, 05:21:32
Si lame.exe escribe esa información en la salida estándar, podes redireccionarla a una tubería (pipe). Para ello has de lanzarla con CreateProcess y su salida estándar redireccionada a una tubería creada por tu proceso con CreatePipe

Es muy probable que ya encontres algun componente que encapsule la tubería... en torry (http://www.torry.net) seguramente lo hallas.

Aqui tenes un vínculo directo al TPipe (http://www.torry.net/vcl/system/appscommunications/pipe.zip) ubicado en torry's, pero seguramente hay mas.

Hasta luego.

;)

delphi.com.ar
30-05-2004, 16:30:54
Lame Encoder tiene una DLL, para poder hacer esto sin crear procesos hijos, que por prolijidad y facilidad, te recomiendo usarla.

Saludos!

Angel Fernández
04-06-2004, 17:37:44
Sé que lame tiene la librería lame_enc.dll y es la que estoy usando. Funciona bien excepto en un problema que me va a volver loco y es que en modo VBR o ABR (bitrato variable o bitrato medio) no consigo hacer que escriba la cabecera del fichero mp3. ¿Qué pasa si el fichero no tiene cabecera? Aparentemente nada; el fichero suena bien. Pero hay un problemilla: ningún reproductor de mp3 indica bien la longitud en segundos del fichero ni es capaz de reconocer el bitrate (indican siempre 32 kbts, el mínimo). He intentado "forzar" al dll con el procedimiento bewritevbrheader(string), pero lo único que consigo es un mensaje de error: BE_ERR_INVALID_FORMAT_PARAMETERS. ¿Alguien sabe qué leches pasa?

En mi defensa he de decir que, por lo que he visto, es un problema universal en casi todos los programillas que usan lame_enc.dll; todos pecan de no escribir la cabecera del archivo mp3. Una honrosa excepción a esto es el entorno de Audiograbber que funciona de maravilla (¿alguien sabe el código fuente de Audiograbber? ¿Demasiado pedir?).

Gracias.

P.D: Entiendo que este problema, más que de programación en Delphi, es de uso de lame_enc.dll, pero en fín, si alguien puede ayudar o decirme alguna dirección será bienvenido.