Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-11-2011
odiseeus odiseeus is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 31
Poder: 0
odiseeus Va por buen camino
leer datos desde un ms-dos

buen dia, he notado que un programa en ms-dos se puede ingresar y leer datos a partir de otro programa ms-dos o de modo visual (builder), me explico mejor... si tengo un programa que se muestra en ms-dos llamado "ejemplo.exe" y que lo que hace en pantalla como tal es pedir un dato y despues de ingresado a continuacion muestra solamente el resultado de ciertos procedimientos en la pantalla del ms-dos, por lo tanto lo unico visible seria dos lineas, una con el dato ingresado y otra con el resultado, ahora quiero saber como seria la sintaxis en c++ para desde otro programa (sea ms-dos o de modo visual(builder)) pueda utilzar el programa "ejemplo.exe" ingresandole el dato y leer el resultado, sin necesidad de ejecutar el programa (ejemplo.exe) como tal por un usuario, pues serviria para hacer un ejecutable que me evaluara muchos ejecutables al menor tiempo... espero haberme hecho entender!.. saludos y gracias!
Responder Con Cita
  #2  
Antiguo 01-11-2011
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_cero_ Va por buen camino
Para mandar un dato es tan simple como escribirlo como parámetro, ejem. “C:\miexe.exe midato”, en este caso le estoy pasando la cadena “midato” al ejecutable “miexe.exe”. Ahora para recibir datos se pone un poco más complicada la cosa, hay muchos métodos, que sirven para comunicarse entre aplicaciones, serian mediante mensajes de Windows, espacios de memoria compartida, tuberías, inyección de código (todos estos métodos sirven en dos vías, es decir sirven para recibir y mandar datos), y seguro que se me está pasando uno que otro método.

Yo te recomendaría que pasaras mensajes, en mi opinión es la manera más simple de comunicación entre aplicaciones, y es tan fácil como enviarlos con el API SendMessage, y monitorearlos desde la otra (esto dependerá de cómo está desarrollada la otra, pero podrias usar PeekMessage), en cualquier caso te dejo algo sobre esto aunque en código delphi, se puede traducir a c++ con cierta facilidad.

http://www.ajpdsoft.com/modules.php?...rticle&sid=480
Responder Con Cita
  #3  
Antiguo 01-11-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
La única pega que se le puede poner al sistema de mensajes, es que estemos tratando con aplicaciones de consola no hechas por nosotros. En ese caso lo mejor son las tuberías.

Este ejemplo de código ejecuta un comando de consola o una aplicación capturando su salida en modo texto. El resto es analizar dicha salida para obtener lo que interese en cada caso:
Código:
String DosCommand(String CommandLine)
{
  char Buffer[4096];
  GetEnvironmentVariable("COMSPEC", Buffer, sizeof(Buffer));
  CommandLine = String(Buffer) + " /C " + CommandLine;
  String Result = "";
  
  HANDLE pipeRead, pipeWrite;
  SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES)};
  sa.bInheritHandle = TRUE;

  if(CreatePipe(&pipeRead, &pipeWrite, &sa, 2500000)){
    STARTUPINFO si = {sizeof(si)};
    PROCESS_INFORMATION pi = {0};
    si.hStdOutput = si.hStdError = pipeWrite;
    si.hStdInput = pipeWrite;//GetStdHandle(STD_INPUT_HANDLE);
    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    if(CreateProcess(0, CommandLine.c_str(), 0, 0, TRUE, 0, 0, 0, &si, &pi)){
      CloseHandle(pi.hThread);
      if(WaitForSingleObject(pi.hProcess, 9000) == WAIT_OBJECT_0){
        DWORD dwRead = 0;
        WriteFile(pipeWrite, "", 1, &dwRead, 0);
        do{
          memset(Buffer, 0, sizeof(Buffer));
          ReadFile(pipeRead, Buffer, sizeof(Buffer), &dwRead, 0);
          OemToCharBuffA(Buffer, Buffer, dwRead);
          Result = Result + "\r\n" + String(Buffer);
        } while (dwRead >= sizeof(Buffer));
      } 

      CloseHandle(pi.hProcess);
    } 
    CloseHandle(pipeRead);
    CloseHandle(pipeWrite);
  }
  
  return Result;
}

Saludos.
Responder Con Cita
  #4  
Antiguo 07-11-2011
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 21
Toni Va por buen camino
Escafranda, es muy interesante esto que publicas. Es algo que tenia en mente para hacer, y que tiene mucha utilidad. Gracias por compartirlo.
__________________
Saludos,

Bitman
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Leer desde Scaner jlalvarez Varios 2 06-05-2008 11:45:09
Leer XML desde URL Walcasar Internet 1 01-03-2007 19:20:42
Leer/insertar/modificar datos desde un archivo XML IVAND Varios 1 26-08-2006 23:11:29
Leer Base de Datos desde un CD Gabriel2 Varios 3 29-09-2005 01:38:15
Leer datos desde una página Web cone220 Internet 1 16-01-2004 23:03:44


La franja horaria es GMT +2. Ahora son las 16:23:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi