2011-09-25 12 views
5

Quería llamar a _popen para obtener los resultados de un ejecutable, pero estaba en blanco.Tubería de un programa que utiliza WriteConsole

Busqué depurador y descubrí que el programa usa Kernel32.WriteConsoleW para escribir una cadena Unicode en la consola, en lugar de usar stdout.

¿Cómo puedo capturarlo?

+0

Alguien sabe si puedo redirigir el control del proceso hijo y llamar a ReadConsole en él? – user202987

Respuesta

0

Debería poder redirigir la salida de un proceso hijo.

Tenga una mirada en Creating a Child Process with Redirected Input and Output

Además, la aplicación podría utilizar en lugar de STD_ERROR_HANDLE STD_OUTPUT_HANDLE.

+1

Trabajando en la solución más desordenada y desordenada que se haya creado en este enlace. Gracias. Básicamente estoy haciendo el sistema ("cls") y luego uso CreateProcess, lo que le permite al hijo procesar el stdout de los padres, luego usar ReadConsoleOutputW y reconstruir el resultado a partir de eso. – user202987

1

La solución overkill: interceptar llamadas a WriteConsoleW enganchándolas en la aplicación al inicio. Probablemente no sea lo que estás buscando, y estoy seguro de que hay una manera más fácil. Pero funcionará con seguridad :)

3

Cualquier salida generada con WriteConsole no se escribirá en la tubería de redirección. Si se proporciona un identificador a una tubería o un archivo o cualquier otra cosa que no sea una consola al WriteConsole, fallará con ERROR_INVALID_HANDLE (6).

De High-Level Console Input and Output Functions en MSDN:

ReadConsole y WriteConsole sólo se pueden utilizar con la consola maneja; ReadFile y WriteFile se pueden usar con otros identificadores (como archivos o conductos). ReadConsole y WriteConsole fallan si se usan con un identificador estándar que se ha redirigido y ya no es un identificador de consola.

Cuestiones relacionadas