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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cambiar título de consola
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cambiar título de consola  (Leído 6,701 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Cambiar título de consola
« en: 4 Febrero 2016, 22:51 pm »

Hola:

Usando el Dev C++ con un hola mundo. En el título de la ventana quiero que me diga el nombre del programa. El programa es hecho en modo consola.

He buscado por google y me dice cambiar el color, pero eso es dentro del programa, no quiero cambiar colores, solo el nombre o título.

Espero que se entienda lo que quiero decir. También hay que ver si en consola es posible hacerlo en Dev C++, en C# se hace así:

Código
  1. Console.title = "Título o nombre del programa";

Estamos en C++ Win32 en modo consola.

Saludos.


En línea

fary


Desconectado Desconectado

Mensajes: 1.084



Ver Perfil WWW
Re: Cambiar título de consola
« Respuesta #1 en: 4 Febrero 2016, 22:55 pm »

Con la API SetConsoleTitle.

https://msdn.microsoft.com/es-es/library/windows/desktop/ms686050%28v=vs.85%29.aspx

saludos.


En línea

Un byte a la izquierda.
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Cambiar título de consola
« Respuesta #2 en: 5 Febrero 2016, 16:24 pm »

Gracias.

He intentado ponerlo en este código pero sale error en el Dev C++ 5.11.

Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <windows.h>
  4. // No olvidar.
  5. #include <tchar.h>
  6. //#include <conio.h>
  7. //#include <strsafe.h>
  8.  
  9. using namespace std;
  10.  
  11. // Tipos de datos:
  12. typedef struct
  13. {
  14.    char Puerto[5];
  15.    int Baudios;
  16.    int BitsDatos;
  17.    int BitsStop;
  18.    char Paridad[25];
  19. } tipoOpciones;
  20.  
  21. bool ocupado;
  22. // Prototipos:
  23. HANDLE InicioComunicacion(tipoOpciones*);
  24. bool FinComunicacion(HANDLE);
  25. DWORD Hilo(LPDWORD lpdwParam);
  26. void EscribirSerie(HANDLE, char *);
  27.  
  28. int main(int argc, char *argv[])
  29. {
  30.  
  31. TCHAR szOldTitle[MAX_PATH];
  32.   TCHAR szNewTitle[MAX_PATH];
  33.  
  34.   // Save current console title.
  35.  
  36.   if( GetConsoleTitle(szOldTitle, MAX_PATH) )
  37.   {
  38.      // Build new console title string.
  39.  
  40.      StringCchPrintf(szNewTitle, MAX_PATH, TEXT("TEST: %s"), szOldTitle);
  41.  
  42.      // Set console title to new title
  43.      if( !SetConsoleTitle(szNewTitle) )
  44.      {
  45.         _tprintf(TEXT("SetConsoleTitle failed (%d)\n"), GetLastError());
  46.         return 1;
  47.      }
  48.      else
  49.      {
  50.         _tprintf(TEXT("SetConsoleTitle succeeded.\n"));
  51.      }
  52.   }
  53.   return 0;
  54.  
  55.    bool salir=false;
  56.    DWORD id;
  57.    char cad[80];
  58.    tipoOpciones Ops;         // Opciones
  59.    HANDLE idComDev;
  60.    HANDLE hHilo;             // Hilo del puerto serie
  61.  
  62.    ocupado = true;
  63.    // Inicializar opciones del puerto serie:
  64.    strcpy(Ops.Puerto, "COM1");
  65.    Ops.Baudios = 115200;
  66.    Ops.BitsDatos = 8;
  67.    Ops.BitsStop = 2;
  68.    strcpy(Ops.Paridad, "Sin paridad");
  69.  
  70.    // No se ha establecido comunicación:
  71.    idComDev = InicioComunicacion(&Ops);
  72.    if(idComDev == INVALID_HANDLE_VALUE) {
  73.        cout << "Inicialización puerto serie" << endl;
  74.        cout << "ERROR: No se puede acceder al puerto serie." << endl;
  75.        return 1;
  76.    }
  77.    // Lanzar hilo de lectura del puerto serie:
  78.    hHilo = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Hilo, (LPDWORD)&idComDev, 0, &id);
  79.    if(!hHilo) cout << "Error" << endl;
  80.    // Bucle principal:
  81.    ocupado = false;
  82.    while(!salir) {
  83.        // Leer un comando:
  84.        cin.getline(cad, 80);
  85.        // Si es "salir", abandonar el bucle:
  86.        if(!strcmp(cad, "salir")) salir = true;
  87.        else {
  88.            // Si no, enviar cadena por el puerto serie:
  89.            strcat(cad, "\r");
  90.            EscribirSerie(idComDev, cad);
  91.        }
  92.    }
  93.    // Liberar hilo:
  94.    CloseHandle(hHilo);
  95.    // Liberar puerto serie:
  96.    FinComunicacion(idComDev);
  97.    return 0;
  98. }
  99.  
  100. // Iniciar el puerto serie:
  101. HANDLE InicioComunicacion(tipoOpciones *Ops)
  102. {
  103.    bool fSuccess;
  104.    HANDLE idComDev;
  105.    DCB dcb;                  // Puerto serie
  106.  
  107.    // Abrir el fichero asociado al puerto:
  108.    idComDev = CreateFile(Ops->Puerto, GENERIC_READ | GENERIC_WRITE,
  109.        0, NULL, OPEN_EXISTING, 0, NULL);
  110.    if(idComDev == INVALID_HANDLE_VALUE) {
  111.        cout << "ERROR: CreateFile. Inicialización puerto serie" << endl;
  112.        return INVALID_HANDLE_VALUE;
  113.    }
  114.    PurgeComm(idComDev, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
  115.  
  116.    // Leer estructura de control del puerto serie, cdb:
  117.    fSuccess = GetCommState(idComDev, &dcb);
  118.    if(!fSuccess) {
  119.        cout << "ERROR: GetCommState. Inicialización puerto serie" << endl;
  120.        // Cerrar el puerto, regresar con 0.
  121.        CloseHandle(idComDev);
  122.        return INVALID_HANDLE_VALUE;
  123.    }
  124.  
  125.    // Modificar el dcb según las opciones definidas:
  126.    dcb.BaudRate = Ops->Baudios;
  127.    dcb.ByteSize = Ops->BitsDatos;
  128.  
  129.    if(!strcmp(Ops->Paridad, "Sin paridad")) dcb.Parity = NOPARITY;
  130.    if(!strcmp(Ops->Paridad, "Paridad par")) dcb.Parity = EVENPARITY;
  131.    if(!strcmp(Ops->Paridad, "Paridad impar")) dcb.Parity = ODDPARITY;
  132.  
  133.    switch(Ops->BitsStop) {
  134.        case 1:
  135.            dcb.StopBits = ONESTOPBIT;
  136.            break;
  137.        case 2:
  138.            dcb.StopBits = TWOSTOPBITS;
  139.            break;
  140.    }
  141.  
  142.    // Modificar la estructura de control del puerto serie:
  143.    fSuccess = SetCommState(idComDev, &dcb);
  144.    if(!fSuccess) {
  145.        cout << "ERROR: SetCommStatus. Inicialización puerto serie" << endl;
  146.        // Cerrar el puerto, regresar con 0.
  147.        CloseHandle(idComDev);
  148.        return INVALID_HANDLE_VALUE;
  149.    }
  150.  
  151.    //// ASIGNAR TIMOUTS!!!
  152.  
  153.    return idComDev;
  154. }
  155.  
  156. // Finalizar comunicación por puerto serie:
  157. bool FinComunicacion(HANDLE idComDev)
  158. {
  159.    // Cerrar el puerto serie:
  160.    CloseHandle(idComDev);
  161.    return true;
  162. }
  163.  
  164. // Hilo de escucha del puerto serie:
  165. DWORD Hilo(LPDWORD lpdwParam)
  166. {
  167.    DWORD leidos;
  168.    COMSTAT cs;
  169.    char *cad;
  170.    DWORD dwCommEvent;
  171.    HANDLE idComDev = *((HANDLE*)lpdwParam);
  172.  
  173.    if(!SetCommMask(idComDev, EV_RXCHAR)) {
  174.        cout << "Error al iniciar captura de evento" << endl;
  175.        return 0;
  176.    }
  177.    do {
  178.        if(WaitCommEvent(idComDev, &dwCommEvent, NULL)) {
  179.            SetCommMask(idComDev, EV_RXCHAR);
  180.            while(ocupado);
  181.            ocupado = true;
  182.            if(dwCommEvent & EV_RXCHAR) {
  183.                ClearCommError(idComDev, &leidos, &cs);
  184.                leidos=0;
  185.                cout << "Detectados " << cs.cbInQue << " caracteres" << endl;
  186.                /* Leer buffer desde puerto serie */
  187.                if(cs.cbInQue) {
  188.                    cad = new char[cs.cbInQue+3]; // Caracteres en buffer, más retorno de línea, más nulo
  189.                    ReadFile(idComDev, cad, cs.cbInQue, &leidos, NULL);
  190.                    cad[leidos] = '\n'; // Terminar cadena con salto de línea y nulo
  191.                    cad[leidos+1] = '\r';
  192.                    cad[leidos+2] = 0;
  193.                    cout << cad;
  194.                    delete[] cad;
  195.                }
  196.            } else {
  197.                cout << "Evento: EV_BREAK o EV_ERR" << endl;
  198.                 ClearCommBreak(idComDev);
  199.            }
  200.            ocupado = false;
  201.        } else {
  202.            cout << "Error en WaitCommEvent" << endl;
  203.            ClearCommError(idComDev, NULL, NULL);
  204.        }
  205.        Sleep(10);
  206.    } while(true);
  207.    return 0;
  208. }
  209.  
  210. void EscribirSerie(HANDLE idComDev, char *buf)
  211. {
  212.    char oBuffer[256];  /* Buffer de salida */
  213.    DWORD iBytesWritten;
  214.  
  215.    iBytesWritten = 0;
  216.    strcpy(oBuffer, buf);
  217.    while(ocupado);
  218.    ocupado = true;
  219.    WriteFile(idComDev, oBuffer, strlen(oBuffer), &iBytesWritten, NULL);
  220.    ocupado = false;
  221. }

47   73   C:\Users\Meta\Desktop\main.cpp   [Error] 'StringCchPrintf' was not declared in this scope


Saludos.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Cambiar título de consola
« Respuesta #3 en: 5 Febrero 2016, 18:23 pm »

El include de la cabecera necesaria esta comentado.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms647541%28v=vs.85%29.aspx
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Cambiar título de consola
« Respuesta #4 en: 5 Febrero 2016, 20:41 pm »

Hola:

Lo traducí, lo que busco simplemente es esto.



Saludos.
« Última modificación: 5 Febrero 2016, 21:04 pm por Meta » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Cambiar título de consola
« Respuesta #5 en: 5 Febrero 2016, 21:27 pm »

No fue suficiente, el error es por StringCchPrintf, tenes que incluir strsafe.h, linea 7, la tenes comentada.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Cambiar título de consola
« Respuesta #6 en: 6 Febrero 2016, 13:30 pm »

Hola:

Me da otros errores indicado en el código de abajo.
Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <windows.h>
  4. // No olvidar.
  5. #include <tchar.h>
  6. #include <conio.h>
  7. #include <strsafe.h>
  8.  
  9. using namespace std;
  10.  
  11. // Tipos de datos:
  12. typedef struct
  13. {
  14.    char Puerto[5];
  15.    int Baudios;
  16.    int BitsDatos;
  17.    int BitsStop;
  18.    char Paridad[25];
  19. } tipoOpciones;
  20.  
  21. bool ocupado;
  22. // Prototipos:
  23. HANDLE InicioComunicacion(tipoOpciones*);
  24. bool FinComunicacion(HANDLE);
  25. DWORD Hilo(LPDWORD lpdwParam);
  26. void EscribirSerie(HANDLE, char *);
  27.  
  28. int main(int argc, char *argv[])
  29. {
  30.  
  31. TCHAR szOldTitle[MAX_PATH];
  32.   TCHAR szNewTitle[MAX_PATH];
  33.  
  34.   // Save current console title.
  35.  
  36.   if( GetConsoleTitle(szOldTitle, MAX_PATH) )
  37.   {
  38.      // Build new console title string.
  39.  
  40.      StringCchPrintf(szNewTitle, MAX_PATH, TEXT("TEST: %s"), szOldTitle);
  41.  
  42.      // Set console title to new title
  43.      if( !SetConsoleTitle(szNewTitle) )
  44.      {
  45.         _tprintf(TEXT("SetConsoleTitle failed (%d)\n"), GetLastError());
  46.         return 1;
  47.      }
  48.      else
  49.      {
  50.         _tprintf(TEXT("SetConsoleTitle succeeded.\n"));
  51.      }
  52.   }
  53.   return 0;
  54.  
  55.    bool salir=false;
  56.    DWORD id;
  57.    char cad[80];
  58.    tipoOpciones Ops;         // Opciones
  59.    HANDLE idComDev;
  60.    HANDLE hHilo;             // Hilo del puerto serie
  61.  
  62.    ocupado = true;
  63.    // Inicializar opciones del puerto serie:
  64.    strcpy(Ops.Puerto, "COM1");
  65.    Ops.Baudios = 115200;
  66.    Ops.BitsDatos = 8;
  67.    Ops.BitsStop = 2;
  68.    strcpy(Ops.Paridad, "Sin paridad");
  69.  
  70.    // No se ha establecido comunicación:
  71.    idComDev = InicioComunicacion(&Ops);
  72.    if(idComDev == INVALID_HANDLE_VALUE) {
  73.        cout << "Inicialización puerto serie" << endl;
  74.        cout << "ERROR: No se puede acceder al puerto serie." << endl;
  75.        return 1;
  76.    }
  77.    // Lanzar hilo de lectura del puerto serie:
  78.    hHilo = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Hilo, (LPDWORD)&idComDev, 0, &id);
  79.    if(!hHilo) cout << "Error" << endl;
  80.    // Bucle principal:
  81.    ocupado = false;
  82.    while(!salir) {
  83.        // Leer un comando:
  84.        cin.getline(cad, 80);
  85.        // Si es "salir", abandonar el bucle:
  86.        if(!strcmp(cad, "salir")) salir = true;
  87.        else {
  88.            // Si no, enviar cadena por el puerto serie:
  89.            strcat(cad, "\r");
  90.            EscribirSerie(idComDev, cad);
  91.        }
  92.    }
  93.    // Liberar hilo:
  94.    CloseHandle(hHilo);
  95.    // Liberar puerto serie:
  96.    FinComunicacion(idComDev);
  97.    return 0;
  98. }
  99.  
  100. // Iniciar el puerto serie:
  101. HANDLE InicioComunicacion(tipoOpciones *Ops)
  102. {
  103.    bool fSuccess;
  104.    HANDLE idComDev;
  105.    DCB dcb;                  // Puerto serie
  106.  
  107.    // Abrir el fichero asociado al puerto:
  108.    idComDev = CreateFile(Ops->Puerto, GENERIC_READ | GENERIC_WRITE,
  109.        0, NULL, OPEN_EXISTING, 0, NULL);
  110.    if(idComDev == INVALID_HANDLE_VALUE) {
  111.        cout << "ERROR: CreateFile. Inicialización puerto serie" << endl;
  112.        return INVALID_HANDLE_VALUE;
  113.    }
  114.    PurgeComm(idComDev, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
  115.  
  116.    // Leer estructura de control del puerto serie, cdb:
  117.    fSuccess = GetCommState(idComDev, &dcb);
  118.    if(!fSuccess) {
  119.        cout << "ERROR: GetCommState. Inicialización puerto serie" << endl;
  120.        // Cerrar el puerto, regresar con 0.
  121.        CloseHandle(idComDev);
  122.        return INVALID_HANDLE_VALUE;
  123.    }
  124.  
  125.    // Modificar el dcb según las opciones definidas:
  126.    dcb.BaudRate = Ops->Baudios;
  127.    dcb.ByteSize = Ops->BitsDatos;
  128.  
  129.    if(!strcmp(Ops->Paridad, "Sin paridad")) dcb.Parity = NOPARITY;
  130.    if(!strcmp(Ops->Paridad, "Paridad par")) dcb.Parity = EVENPARITY;
  131.    if(!strcmp(Ops->Paridad, "Paridad impar")) dcb.Parity = ODDPARITY;
  132.  
  133.    switch(Ops->BitsStop) {
  134.        case 1:
  135.            dcb.StopBits = ONESTOPBIT;
  136.            break;
  137.        case 2:
  138.            dcb.StopBits = TWOSTOPBITS;
  139.            break;
  140.    }
  141.  
  142.    // Modificar la estructura de control del puerto serie:
  143.    fSuccess = SetCommState(idComDev, &dcb);
  144.    if(!fSuccess) {
  145.        cout << "ERROR: SetCommStatus. Inicialización puerto serie" << endl;
  146.        // Cerrar el puerto, regresar con 0.
  147.        CloseHandle(idComDev);
  148.        return INVALID_HANDLE_VALUE;
  149.    }
  150.  
  151.    //// ASIGNAR TIMOUTS!!!
  152.  
  153.    return idComDev;
  154. }
  155.  
  156. // Finalizar comunicación por puerto serie:
  157. bool FinComunicacion(HANDLE idComDev)
  158. {
  159.    // Cerrar el puerto serie:
  160.    CloseHandle(idComDev);
  161.    return true;
  162. }
  163.  
  164. // Hilo de escucha del puerto serie:
  165. DWORD Hilo(LPDWORD lpdwParam)
  166. {
  167.    DWORD leidos;
  168.    COMSTAT cs;
  169.    char *cad;
  170.    DWORD dwCommEvent;
  171.    HANDLE idComDev = *((HANDLE*)lpdwParam);
  172.  
  173.    if(!SetCommMask(idComDev, EV_RXCHAR)) {
  174.        cout << "Error al iniciar captura de evento" << endl;
  175.        return 0;
  176.    }
  177.    do {
  178.        if(WaitCommEvent(idComDev, &dwCommEvent, NULL)) {
  179.            SetCommMask(idComDev, EV_RXCHAR);
  180.            while(ocupado);
  181.            ocupado = true;
  182.            if(dwCommEvent & EV_RXCHAR) {
  183.                ClearCommError(idComDev, &leidos, &cs);
  184.                leidos=0;
  185.                cout << "Detectados " << cs.cbInQue << " caracteres" << endl;
  186.                /* Leer buffer desde puerto serie */
  187.                if(cs.cbInQue) {
  188.                    cad = new char[cs.cbInQue+3]; // Caracteres en buffer, más retorno de línea, más nulo
  189.                    ReadFile(idComDev, cad, cs.cbInQue, &leidos, NULL);
  190.                    cad[leidos] = '\n'; // Terminar cadena con salto de línea y nulo
  191.                    cad[leidos+1] = '\r';
  192.                    cad[leidos+2] = 0;
  193.                    cout << cad;
  194.                    delete[] cad;
  195.                }
  196.            } else {
  197.                cout << "Evento: EV_BREAK o EV_ERR" << endl;
  198.                 ClearCommBreak(idComDev);
  199.            }
  200.            ocupado = false;
  201.        } else {
  202.            cout << "Error en WaitCommEvent" << endl;
  203.            ClearCommError(idComDev, NULL, NULL);
  204.        }
  205.        Sleep(10);
  206.    } while(true);
  207.    return 0;
  208. }
  209.  
  210. void EscribirSerie(HANDLE idComDev, char *buf)
  211. {
  212.    char oBuffer[256];  /* Buffer de salida */
  213.    DWORD iBytesWritten;
  214.  
  215.    iBytesWritten = 0;
  216.    strcpy(oBuffer, buf);
  217.    while(ocupado);
  218.    ocupado = true;
  219.    WriteFile(idComDev, oBuffer, strlen(oBuffer), &iBytesWritten, NULL);
  220.    ocupado = false;
  221. }

Línea 64.
Citar
71   5   C:\Users\Usuario\Desktop\main.cpp   [Error] 'strcpy_instead_use_StringCbCopyA_or_StringCchCopyA' was not declared in this scope

Línea 89.
Citar
89   13   C:\Users\Usuario\Desktop\main.cpp   [Error] 'strcat_instead_use_StringCbCatA_or_StringCchCatA' was not declared in this scope

Línea 216.
Citar
216   5   C:\Users\Usuario\Desktop\main.cpp   [Error] 'strcpy_instead_use_StringCbCopyA_or_StringCchCopyA' was not declared in this scope
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Cambiar título de consola
« Respuesta #7 en: 6 Febrero 2016, 13:47 pm »

No tienen nada que ver con cambiar el titulo de la consola, es muy dificil hacer un programa copiando y pegando si uno no comprende el lenguaje.

Código:
SetConsoleTitleA("123");
SetConsoleTitleW(L"123");
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cambiar titulo TitledBorder en JPanel
Java
monsefoster 2 28,476 Último mensaje 10 Abril 2011, 07:28 am
por monsefoster
Cambiar titulo
Ingeniería Inversa
darkmeyer 4 4,651 Último mensaje 4 Agosto 2011, 06:52 am
por .:UND3R:.
MOVIDO: Cambiar titulo
.NET (C#, VB.NET, ASP)
madpitbull_99 0 1,906 Último mensaje 3 Agosto 2011, 17:23 pm
por madpitbull_99
Cambiar titulo de un video (Win7)
Multimedia
cratps 7 37,073 Último mensaje 22 Mayo 2013, 18:14 pm
por CherokiEH
Aporte. Funcion para poner pantalla de título a programa por consola.
Programación C/C++
@XSStringManolo 0 1,675 Último mensaje 9 Junio 2019, 05:45 am
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines