[SOLUCIONADO] System("")

Iniciado por victorio95, Octubre 28, 2019, 11:20:41 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Octubre 28, 2019, 11:20:41 AM Ultima modificación: Octubre 29, 2019, 04:15:00 PM por Gabriela
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

Octubre 28, 2019, 12:15:24 PM #1 Ultima modificación: Octubre 29, 2019, 03:13:38 PM por blackdrake
¿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
echo 1 | 2jpeg -src rutaInput -dst rutaOutput -jpeg mode:quality:100


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

- DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

buenas,

si me escribe el 1 que necesito pero sigue esperando a que le de al Intro  :'( :'(

Octubre 29, 2019, 04:03:34 PM #3 Ultima modificación: Octubre 29, 2019, 04:29:38 PM por Solid Water
Esta es la solución clara:
Te la muestro con un ejemplo, tenemos el siguiente programa C#:
Código: csharp

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

(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++
#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++

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

SendMessage(TuVentana, WM_KEYDOWN, VK_RETURN, 0);


Prueba también:
Código: c++

PostMessage(TuVentana, WM_KEYDOWN, VK_RETURN, 0);


Saludos,