elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como se abre 2 terminales en un programa [windows] ?
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Como se abre 2 terminales en un programa [windows] ?  (Leído 5,287 veces)
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Como se abre 2 terminales en un programa [windows] ?
« en: 25 Marzo 2013, 23:26 pm »

Como se abre 2 terminales en un programa [windows]?


En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Como se abre 2 terminales en un programa [windows] ?
« Respuesta #1 en: 25 Marzo 2013, 23:32 pm »

Quizás con:
Código
  1. system("start cmd");
Obviamente no vas a poder trabajar mucho con ella...


En línea

Regístrate en
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: Como se abre 2 terminales en un programa [windows] ?
« Respuesta #2 en: 25 Marzo 2013, 23:50 pm »

Quizás con:
Código
  1. system("start cmd");
Obviamente no vas a poder trabajar mucho con ella...
esa no es la idea, lo que quiero es poder manejar 2 terminales una para recibir datos y otra para enviar...

xDD
En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Como se abre 2 terminales en un programa [windows] ?
« Respuesta #3 en: 26 Marzo 2013, 00:15 am »

Quizás este enlace te sirva:

http://forums.codeguru.com/showthread.php?302501-Processes-How-can-I-start-a-process
En línea

Regístrate en
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: Como se abre 2 terminales en un programa [windows] ?
« Respuesta #4 en: 26 Marzo 2013, 13:16 pm »

Eso serviría si supiera como poner la terminal que abro, como la que se ejecuta al compilar que recibe datos de cout .

Creo que ahora me puedes a ver entendido mejor.
« Última modificación: 26 Marzo 2013, 13:18 pm por Xafi » En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Como se abre 2 terminales en un programa [windows] ?
« Respuesta #5 en: 26 Marzo 2013, 13:32 pm »

Sí si te he entendido perfectamente ahora, pues lo que se me ocurre es que crees dos procesos con CreateProcess y mediante Pipes te comuniques con el stdout de una terminal y el stdin de otra. Te dejo unos enlaces:

http://msdn.microsoft.com/en-us/library/ms682512%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365603%28v=vs.85%29.aspx

Otro enlace que tiene mejor pinta:

http://tenouk.com/cpluscodesnippet/pipeandchildprocess.html

Un código para abrir una cmd nueva, ya solo nos falta comunicarnos por ella mediante Pipes:
Código
  1. #include <windows.h>
  2. #include <tchar.h>
  3.  
  4. int _tmain(int argc, _TCHAR* argv[])
  5. {
  6.    printf("Window A\n");
  7.  
  8.    STARTUPINFO          si = { sizeof(si) };
  9.    PROCESS_INFORMATION  pi;
  10.    TCHAR               szExe[] = _T("cmd.exe"); // <-- Could be any program
  11.  
  12.    if(CreateProcess(0, szExe, 0, 0, FALSE, CREATE_NEW_CONSOLE, 0, 0, &si, &pi))
  13.    {
  14.        // optionally wait for process to finish
  15.        //WaitForSingleObject(pi.hProcess, INFINITE);
  16.  
  17.        CloseHandle(pi.hProcess);
  18.        CloseHandle(pi.hThread);
  19.    }
  20.    return 0;
  21. }
« Última modificación: 26 Marzo 2013, 14:04 pm por avesudra » En línea

Regístrate en
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: Como se abre 2 terminales en un programa [windows] ?
« Respuesta #6 en: 26 Marzo 2013, 14:08 pm »

Gracias Avesudra  voy a mirar la info pasada.

EDIT: LOL que engorroso es...
« Última modificación: 26 Marzo 2013, 14:16 pm por Xafi » En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
daryo


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: Como se abre 2 terminales en un programa [windows] ?
« Respuesta #7 en: 26 Marzo 2013, 14:27 pm »

en este programa hace falta las pipes  :-X para manejar el proceso en si



http://msdn.microsoft.com/en-us/library/windows/desktop/aa365780%28v=vs.85%29.aspx


http://blog.hernanjlarrea.com.ar/index.php/qu-es-un-named-pipe/ ejemplo en c# pero al menos explica mas o menos que es eso
En línea

buenas
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Como se abre 2 terminales en un programa [windows] ?
« Respuesta #8 en: 26 Marzo 2013, 16:32 pm »

Voy a aclarar las cosas porque yo me creía que con las pipes podía manejar cualquier proceso y no es así. Las pipes sirven para comunicar dos procesos, uno de ellos es el cliente, y otro el servidor. Lo que pasa es que hay que crear dos programas uno que mande datos por un pipe(servidor) y otro que lea datos por ese pipe y los muestre ( el cliente,una especie de stdout personalizado). Y para el de la entrada pues lo mismo. Por lo tanto los programas deben tener esto:

Servidor

  • Llamar a CreateNamedPipe(..) para crear una instancia de un pipe con nombre.
  • LLamar a ConnectNamedPipe(..) para conectar con el cliente.
  • LLamar a WriteFile(..) para enviar datos por el pipe.
  • LLamar a CloseHandle(..) para desconectar y cerrar la instancia del pipe.
Cliente

  • Llamar a CreateFile(..) para conectar el pipe.
  • Llamar ReadFile(..) para leer datos del pipe.
  • Mostrar los datos por la pantalla.
  • LLamar a CloseHandle(..) para desconectarse del pipe.

Así que ya sabes lo que tienes que hacer, no sé si hay una manera más fácil pero bueno no está mal aprender esto. Aquí te dejo un ejemplo de servidor y cliente:
Servidor:
Código
  1. ///// SERVER PROGRAM /////
  2.  
  3. #include <iostream>
  4. #include <windows.h>
  5. using namespace std;
  6.  
  7. int main(int argc, const char **argv)
  8. {
  9. wcout << "Creating an instance of a named pipe..." << endl;
  10.  
  11. // Create a pipe to send data
  12. HANDLE pipe = CreateNamedPipe(
  13. L"\\\\.\\pipe\\my_pipe", // name of the pipe
  14. PIPE_ACCESS_OUTBOUND, // 1-way pipe -- send only
  15. PIPE_TYPE_BYTE, // send data as a byte stream
  16. 1, // only allow 1 instance of this pipe
  17. 0, // no outbound buffer
  18. 0, // no inbound buffer
  19. 0, // use default wait time
  20. NULL // use default security attributes
  21. );
  22.  
  23. if (pipe == NULL || pipe == INVALID_HANDLE_VALUE) {
  24. wcout << "Failed to create outbound pipe instance.";
  25. // look up error code here using GetLastError()
  26. system("pause");
  27. return 1;
  28. }
  29.  
  30. wcout << "Waiting for a client to connect to the pipe..." << endl;
  31.  
  32. // This call blocks until a client process connects to the pipe
  33. BOOL result = ConnectNamedPipe(pipe, NULL);
  34. if (!result) {
  35. wcout << "Failed to make connection on named pipe." << endl;
  36. // look up error code here using GetLastError()
  37. CloseHandle(pipe); // close the pipe
  38. system("pause");
  39. return 1;
  40. }
  41.  
  42. wcout << "Sending data to pipe..." << endl;
  43.  
  44. // This call blocks until a client process reads all the data
  45. const wchar_t *data = L"*** Hello Pipe World ***";
  46. DWORD numBytesWritten = 0;
  47. result = WriteFile(
  48. pipe, // handle to our outbound pipe
  49. data, // data to send
  50. wcslen(data) * sizeof(wchar_t), // length of data to send (bytes)
  51. &numBytesWritten, // will store actual amount of data sent
  52. NULL // not using overlapped IO
  53. );
  54.  
  55.  
  56. if (result) {
  57. wcout << "Number of bytes sent: " << numBytesWritten << endl;
  58. } else {
  59. wcout << "Failed to send data." << endl;
  60. // look up error code here using GetLastError()
  61. }
  62.  
  63. // Close the pipe (automatically disconnects client too)
  64. CloseHandle(pipe);
  65.  
  66. wcout << "Done." << endl;
  67.  
  68. system("pause");
  69. return 0;
  70. }
Cliente:
Código
  1. ///// CLIENT PROGRAM /////
  2.  
  3. #include <iostream>
  4. #include <windows.h>
  5. using namespace std;
  6.  
  7. int main(int argc, const char **argv)
  8. {
  9. wcout << "Connecting to pipe..." << endl;
  10.  
  11. // Open the named pipe
  12. // Most of these parameters aren't very relevant for pipes.
  13. HANDLE pipe = CreateFile(
  14. L"\\\\.\\pipe\\my_pipe",
  15. GENERIC_READ, // only need read access
  16. FILE_SHARE_READ | FILE_SHARE_WRITE,
  17. NULL,
  18. OPEN_EXISTING,
  19. FILE_ATTRIBUTE_NORMAL,
  20. NULL
  21. );
  22.  
  23. if (pipe == INVALID_HANDLE_VALUE) {
  24. wcout << "Failed to connect to pipe." << endl;
  25. // look up error code here using GetLastError()
  26. system("pause");
  27. return 1;
  28. }
  29.  
  30. wcout << "Reading data from pipe..." << endl;
  31.  
  32. // The read operation will block until there is data to read
  33. wchar_t buffer[128];
  34. DWORD numBytesRead = 0;
  35. BOOL result = ReadFile(
  36. pipe,
  37. buffer, // the data from the pipe will be put here
  38. 127 * sizeof(wchar_t), // number of bytes allocated
  39. &numBytesRead, // this will store number of bytes actually read
  40. NULL // not using overlapped IO
  41. );
  42.  
  43. if (result) {
  44. buffer[numBytesRead / sizeof(wchar_t)] = '\0'; // null terminate the string
  45. wcout << "Number of bytes read: " << numBytesRead << endl;
  46. wcout << "Message: " << buffer << endl;
  47. } else {
  48. wcout << "Failed to read data from the pipe." << endl;
  49. }
  50.  
  51. // Close our pipe handle
  52. CloseHandle(pipe);
  53.  
  54. wcout << "Done." << endl;
  55.  
  56. system("pause");
  57. return 0;
  58. }

Este código y la info la he sacado de http://avid-insight.co.uk/joomla/component/k2/item/589-introduction-to-win32-named-pipes-cpp

P.D: Creo que estoy en lo cierto, si algún usuario cree que no que lo diga.
En línea

Regístrate en
85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Como se abre 2 terminales en un programa [windows] ?
« Respuesta #9 en: 26 Marzo 2013, 23:00 pm »

disculpen no he leído todo el topic detenidamente (Estoy perezoso XD), pero no será que necesita crear una ventana de consola, algo así

Código:
AllocConsole();  // Create Console Window
freopen("CONIN$","rb",stdin);   // reopen stdin handle as console window input
freopen("CONOUT$","wb",stdout);  // reopen stout handle as console window output
freopen("CONOUT$","wb",stderr); // reopen stderr handle as console window output

... código

FreeConsole();  // Free Console Window

Porque leí algo de crear otro proceso, etc pero a juzgar por el título...
aunque yo para lo que usé este código fue para crear una ventana de consola en una aplicación win32, para ingresar unos datos por consola y luego cerrarla.

Saludos

En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
no me abre ningun programa « 1 2 3 »
Seguridad
Constance 29 13,280 Último mensaje 3 Febrero 2012, 22:11 pm
por Constance
no me abre programa
GNU/Linux
General Dmitry Vergadoski 5 2,639 Último mensaje 17 Mayo 2012, 21:13 pm
por RyogiShiki
Windows Phone 8.1 Update 2 llegará a algunos terminales
Noticias
wolfbcn 0 1,246 Último mensaje 9 Abril 2015, 21:49 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines