![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
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 |
|
#2
|
||||
|
||||
|
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. |
|
#3
|
|||
|
|||
|
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 |
![]() |
|
|
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 |
|