Underc0de - La Casa de los Informáticos

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: victorio95 en Octubre 28, 2019, 11:20:41 AM

Título: [SOLUCIONADO] System("")
Publicado por: victorio95 en Octubre 28, 2019, 11:20:41 AM
Bueno, primer post. Sed amables jajaja.

Al lío,
estoy haciendo un programa en C++ el cual llama a un programa externo mediante la función system(ruta). Pero dicho programa tiene  una especie de "switch". Ésto hace que no pueda completarse la llamada y se queda en espera hasta que, en este caso, le de al 1.

el programa al que llamo es 2jpeg.exe:

Código:
system("2jpeg -src rutaInput -dst rutaOutput -jpeg mode:quality:100");

al ejecutar esto en el cmd es cuando me sale el "switch":

Before you start converting process,
please note that free version of 2Jpeg
adds one demo label to the output file

1- Continue, 2- Order FULL version, 3- Exit

entonces... ¿Es posible decirle desde C++ pasarle el 1 para que continúe con el proceso?

Gracias de antemano
Título: Re:system("")
Publicado por: DtxdF en Octubre 28, 2019, 12:15:24 PM
¿Intentaste con tuberias?; Porque me parece que el programa te pide que ingreses la entrada de un dato (Estilo un «raw_input» en python2.x o «input» en python3).

En tu caso yo usaria:

Código (bash) [Seleccionar]
echo 1 | 2jpeg -src rutaInput -dst rutaOutput -jpeg mode:quality:100

Lo único que tienes que hacer es adaptarlo ...

- DtxdF
Título: Re:system("")
Publicado por: victorio95 en Octubre 29, 2019, 06:26:39 AM
buenas,

si me escribe el 1 que necesito pero sigue esperando a que le de al Intro  :'( :'(
Título: Re:system("")
Publicado por: Solid Water en Octubre 29, 2019, 04:03:34 PM
Esta es la solución clara:
Te la muestro con un ejemplo, tenemos el siguiente programa C#:
Código (csharp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
           
            string a, b, c;
            System.Console.WriteLine("ingrese a: \n");
            a = System.Console.ReadLine();
            System.Console.WriteLine("ingrese b: \n");
            b = System.Console.ReadLine();
            System.Console.WriteLine("ingrese c: \n");
            c = System.Console.ReadLine();
           
            System.Console.WriteLine("a:" + a + " b:" + b + " c:" + c);

            Console.ReadKey();
        }
    }
}

Un simple programa que pide que le ingreses 3 valores..
Le enviamos el siguiente comando cmd para ingresar los 3 valores automaticamente:

Código (batch) [Seleccionar]

(echo "valor para a" && echo "valor para b" &&  echo "valor para c")|ConsoleApplication1.exe

IMPRIME EN PANTALLA:
a:"valor para a"  b:"valor para b"  c:"valor para c"

-----------------------------------------------------------------------------------------

Por si quieres aprender algo más y una solución más sucia pero muy útil de aprender:
Puede simular keystrokes desde c++:
Aunque en este caso tendras que usar threads o crear un programa externo ya que el anterior estara bussy con lo que ejecutaste de cmd.
Código (c++) [Seleccionar]
#include <windows.h>

// ENTER key down
keybd_event(VK_RETURN, 0x9C, 0, 0);

// ENTER key up
keybd_event(VK_RETURN, 0x9C, KEYEVENTF_KEYUP, 0);


Si  quieres hacerlo mejor primero dale el foco a esa ventana o que se lo envie..

Código (c++) [Seleccionar]

HWND TuVentana = FindWindow(_T("TuVentana"), NULL);

SendMessage(TuVentana, WM_KEYDOWN, VK_RETURN, 0);


Prueba también:
Código (c++) [Seleccionar]

PostMessage(TuVentana, WM_KEYDOWN, VK_RETURN, 0);


Saludos,