Autor
|
Tema: Cambiar título de consola (Leído 6,701 veces)
|
Meta
|
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í: Console.title = "Título o nombre del programa";
Estamos en C++ Win32 en modo consola. Saludos.
|
|
|
En línea
|
|
|
|
fary
|
|
|
|
En línea
|
Un byte a la izquierda.
|
|
|
Meta
|
Gracias. He intentado ponerlo en este código pero sale error en el Dev C++ 5.11. #include <iostream> #include <cstring> #include <windows.h> // No olvidar. #include <tchar.h> //#include <conio.h> //#include <strsafe.h> using namespace std; // Tipos de datos: typedef struct { char Puerto[5]; int Baudios; int BitsDatos; int BitsStop; char Paridad[25]; } tipoOpciones; bool ocupado; // Prototipos: HANDLE InicioComunicacion(tipoOpciones*); bool FinComunicacion(HANDLE); DWORD Hilo(LPDWORD lpdwParam); void EscribirSerie(HANDLE, char *); int main(int argc, char *argv[]) { TCHAR szOldTitle[MAX_PATH]; TCHAR szNewTitle[MAX_PATH]; // Save current console title. if( GetConsoleTitle(szOldTitle, MAX_PATH) ) { // Build new console title string. StringCchPrintf(szNewTitle, MAX_PATH, TEXT("TEST: %s"), szOldTitle); // Set console title to new title if( !SetConsoleTitle(szNewTitle) ) { _tprintf(TEXT("SetConsoleTitle failed (%d)\n"), GetLastError()); return 1; } else { _tprintf(TEXT("SetConsoleTitle succeeded.\n")); } } return 0; bool salir=false; DWORD id; char cad[80]; tipoOpciones Ops; // Opciones HANDLE idComDev; HANDLE hHilo; // Hilo del puerto serie ocupado = true; // Inicializar opciones del puerto serie: strcpy(Ops.Puerto, "COM1"); Ops.Baudios = 115200; Ops.BitsDatos = 8; Ops.BitsStop = 2; strcpy(Ops.Paridad, "Sin paridad"); // No se ha establecido comunicación: idComDev = InicioComunicacion(&Ops); if(idComDev == INVALID_HANDLE_VALUE) { cout << "Inicialización puerto serie" << endl; cout << "ERROR: No se puede acceder al puerto serie." << endl; return 1; } // Lanzar hilo de lectura del puerto serie: hHilo = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Hilo, (LPDWORD)&idComDev, 0, &id); if(!hHilo) cout << "Error" << endl; // Bucle principal: ocupado = false; while(!salir) { // Leer un comando: cin.getline(cad, 80); // Si es "salir", abandonar el bucle: if(!strcmp(cad, "salir")) salir = true; else { // Si no, enviar cadena por el puerto serie: strcat(cad, "\r"); EscribirSerie(idComDev, cad); } } // Liberar hilo: CloseHandle(hHilo); // Liberar puerto serie: FinComunicacion(idComDev); return 0; } // Iniciar el puerto serie: HANDLE InicioComunicacion(tipoOpciones *Ops) { bool fSuccess; HANDLE idComDev; DCB dcb; // Puerto serie // Abrir el fichero asociado al puerto: idComDev = CreateFile(Ops->Puerto, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if(idComDev == INVALID_HANDLE_VALUE) { cout << "ERROR: CreateFile. Inicialización puerto serie" << endl; return INVALID_HANDLE_VALUE; } PurgeComm(idComDev, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); // Leer estructura de control del puerto serie, cdb: fSuccess = GetCommState(idComDev, &dcb); if(!fSuccess) { cout << "ERROR: GetCommState. Inicialización puerto serie" << endl; // Cerrar el puerto, regresar con 0. CloseHandle(idComDev); return INVALID_HANDLE_VALUE; } // Modificar el dcb según las opciones definidas: dcb.BaudRate = Ops->Baudios; dcb.ByteSize = Ops->BitsDatos; if(!strcmp(Ops->Paridad, "Sin paridad")) dcb.Parity = NOPARITY; if(!strcmp(Ops->Paridad, "Paridad par")) dcb.Parity = EVENPARITY; if(!strcmp(Ops->Paridad, "Paridad impar")) dcb.Parity = ODDPARITY; switch(Ops->BitsStop) { case 1: dcb.StopBits = ONESTOPBIT; break; case 2: dcb.StopBits = TWOSTOPBITS; break; } // Modificar la estructura de control del puerto serie: fSuccess = SetCommState(idComDev, &dcb); if(!fSuccess) { cout << "ERROR: SetCommStatus. Inicialización puerto serie" << endl; // Cerrar el puerto, regresar con 0. CloseHandle(idComDev); return INVALID_HANDLE_VALUE; } //// ASIGNAR TIMOUTS!!! return idComDev; } // Finalizar comunicación por puerto serie: bool FinComunicacion(HANDLE idComDev) { // Cerrar el puerto serie: CloseHandle(idComDev); return true; } // Hilo de escucha del puerto serie: DWORD Hilo(LPDWORD lpdwParam) { DWORD leidos; COMSTAT cs; char *cad; DWORD dwCommEvent; HANDLE idComDev = *((HANDLE*)lpdwParam); if(!SetCommMask(idComDev, EV_RXCHAR)) { cout << "Error al iniciar captura de evento" << endl; return 0; } do { if(WaitCommEvent(idComDev, &dwCommEvent, NULL)) { SetCommMask(idComDev, EV_RXCHAR); while(ocupado); ocupado = true; if(dwCommEvent & EV_RXCHAR) { ClearCommError(idComDev, &leidos, &cs); leidos=0; cout << "Detectados " << cs.cbInQue << " caracteres" << endl; /* Leer buffer desde puerto serie */ if(cs.cbInQue) { cad = new char[cs.cbInQue+3]; // Caracteres en buffer, más retorno de línea, más nulo ReadFile(idComDev, cad, cs.cbInQue, &leidos, NULL); cad[leidos] = '\n'; // Terminar cadena con salto de línea y nulo cad[leidos+1] = '\r'; cad[leidos+2] = 0; cout << cad; delete[] cad; } } else { cout << "Evento: EV_BREAK o EV_ERR" << endl; ClearCommBreak(idComDev); } ocupado = false; } else { cout << "Error en WaitCommEvent" << endl; ClearCommError(idComDev, NULL, NULL); } Sleep(10); } while(true); return 0; } void EscribirSerie(HANDLE idComDev, char *buf) { char oBuffer[256]; /* Buffer de salida */ DWORD iBytesWritten; iBytesWritten = 0; strcpy(oBuffer, buf); while(ocupado); ocupado = true; WriteFile(idComDev, oBuffer, strlen(oBuffer), &iBytesWritten, NULL); ocupado = false; }
47 73 C:\Users\Meta\Desktop\main.cpp [Error] 'StringCchPrintf' was not declared in this scopeSaludos.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
|
|
|
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
|
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
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
Hola: Me da otros errores indicado en el código de abajo. #include <iostream> #include <cstring> #include <windows.h> // No olvidar. #include <tchar.h> #include <conio.h> #include <strsafe.h> using namespace std; // Tipos de datos: typedef struct { char Puerto[5]; int Baudios; int BitsDatos; int BitsStop; char Paridad[25]; } tipoOpciones; bool ocupado; // Prototipos: HANDLE InicioComunicacion(tipoOpciones*); bool FinComunicacion(HANDLE); DWORD Hilo(LPDWORD lpdwParam); void EscribirSerie(HANDLE, char *); int main(int argc, char *argv[]) { TCHAR szOldTitle[MAX_PATH]; TCHAR szNewTitle[MAX_PATH]; // Save current console title. if( GetConsoleTitle(szOldTitle, MAX_PATH) ) { // Build new console title string. StringCchPrintf(szNewTitle, MAX_PATH, TEXT("TEST: %s"), szOldTitle); // Set console title to new title if( !SetConsoleTitle(szNewTitle) ) { _tprintf(TEXT("SetConsoleTitle failed (%d)\n"), GetLastError()); return 1; } else { _tprintf(TEXT("SetConsoleTitle succeeded.\n")); } } return 0; bool salir=false; DWORD id; char cad[80]; tipoOpciones Ops; // Opciones HANDLE idComDev; HANDLE hHilo; // Hilo del puerto serie ocupado = true; // Inicializar opciones del puerto serie: strcpy(Ops.Puerto, "COM1"); Ops.Baudios = 115200; Ops.BitsDatos = 8; Ops.BitsStop = 2; strcpy(Ops.Paridad, "Sin paridad"); // No se ha establecido comunicación: idComDev = InicioComunicacion(&Ops); if(idComDev == INVALID_HANDLE_VALUE) { cout << "Inicialización puerto serie" << endl; cout << "ERROR: No se puede acceder al puerto serie." << endl; return 1; } // Lanzar hilo de lectura del puerto serie: hHilo = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Hilo, (LPDWORD)&idComDev, 0, &id); if(!hHilo) cout << "Error" << endl; // Bucle principal: ocupado = false; while(!salir) { // Leer un comando: cin.getline(cad, 80); // Si es "salir", abandonar el bucle: if(!strcmp(cad, "salir")) salir = true; else { // Si no, enviar cadena por el puerto serie: strcat(cad, "\r"); EscribirSerie(idComDev, cad); } } // Liberar hilo: CloseHandle(hHilo); // Liberar puerto serie: FinComunicacion(idComDev); return 0; } // Iniciar el puerto serie: HANDLE InicioComunicacion(tipoOpciones *Ops) { bool fSuccess; HANDLE idComDev; DCB dcb; // Puerto serie // Abrir el fichero asociado al puerto: idComDev = CreateFile(Ops->Puerto, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if(idComDev == INVALID_HANDLE_VALUE) { cout << "ERROR: CreateFile. Inicialización puerto serie" << endl; return INVALID_HANDLE_VALUE; } PurgeComm(idComDev, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); // Leer estructura de control del puerto serie, cdb: fSuccess = GetCommState(idComDev, &dcb); if(!fSuccess) { cout << "ERROR: GetCommState. Inicialización puerto serie" << endl; // Cerrar el puerto, regresar con 0. CloseHandle(idComDev); return INVALID_HANDLE_VALUE; } // Modificar el dcb según las opciones definidas: dcb.BaudRate = Ops->Baudios; dcb.ByteSize = Ops->BitsDatos; if(!strcmp(Ops->Paridad, "Sin paridad")) dcb.Parity = NOPARITY; if(!strcmp(Ops->Paridad, "Paridad par")) dcb.Parity = EVENPARITY; if(!strcmp(Ops->Paridad, "Paridad impar")) dcb.Parity = ODDPARITY; switch(Ops->BitsStop) { case 1: dcb.StopBits = ONESTOPBIT; break; case 2: dcb.StopBits = TWOSTOPBITS; break; } // Modificar la estructura de control del puerto serie: fSuccess = SetCommState(idComDev, &dcb); if(!fSuccess) { cout << "ERROR: SetCommStatus. Inicialización puerto serie" << endl; // Cerrar el puerto, regresar con 0. CloseHandle(idComDev); return INVALID_HANDLE_VALUE; } //// ASIGNAR TIMOUTS!!! return idComDev; } // Finalizar comunicación por puerto serie: bool FinComunicacion(HANDLE idComDev) { // Cerrar el puerto serie: CloseHandle(idComDev); return true; } // Hilo de escucha del puerto serie: DWORD Hilo(LPDWORD lpdwParam) { DWORD leidos; COMSTAT cs; char *cad; DWORD dwCommEvent; HANDLE idComDev = *((HANDLE*)lpdwParam); if(!SetCommMask(idComDev, EV_RXCHAR)) { cout << "Error al iniciar captura de evento" << endl; return 0; } do { if(WaitCommEvent(idComDev, &dwCommEvent, NULL)) { SetCommMask(idComDev, EV_RXCHAR); while(ocupado); ocupado = true; if(dwCommEvent & EV_RXCHAR) { ClearCommError(idComDev, &leidos, &cs); leidos=0; cout << "Detectados " << cs.cbInQue << " caracteres" << endl; /* Leer buffer desde puerto serie */ if(cs.cbInQue) { cad = new char[cs.cbInQue+3]; // Caracteres en buffer, más retorno de línea, más nulo ReadFile(idComDev, cad, cs.cbInQue, &leidos, NULL); cad[leidos] = '\n'; // Terminar cadena con salto de línea y nulo cad[leidos+1] = '\r'; cad[leidos+2] = 0; cout << cad; delete[] cad; } } else { cout << "Evento: EV_BREAK o EV_ERR" << endl; ClearCommBreak(idComDev); } ocupado = false; } else { cout << "Error en WaitCommEvent" << endl; ClearCommError(idComDev, NULL, NULL); } Sleep(10); } while(true); return 0; } void EscribirSerie(HANDLE idComDev, char *buf) { char oBuffer[256]; /* Buffer de salida */ DWORD iBytesWritten; iBytesWritten = 0; strcpy(oBuffer, buf); while(ocupado); ocupado = true; WriteFile(idComDev, oBuffer, strlen(oBuffer), &iBytesWritten, NULL); ocupado = false; }
Línea 64. 71 5 C:\Users\Usuario\Desktop\main.cpp [Error] 'strcpy_instead_use_StringCbCopyA_or_StringCchCopyA' was not declared in this scope Línea 89. 89 13 C:\Users\Usuario\Desktop\main.cpp [Error] 'strcat_instead_use_StringCbCatA_or_StringCchCatA' was not declared in this scope Línea 216. 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
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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. 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cambiar titulo TitledBorder en JPanel
Java
|
monsefoster
|
2
|
28,476
|
10 Abril 2011, 07:28 am
por monsefoster
|
|
|
Cambiar titulo
Ingeniería Inversa
|
darkmeyer
|
4
|
4,651
|
4 Agosto 2011, 06:52 am
por .:UND3R:.
|
|
|
MOVIDO: Cambiar titulo
.NET (C#, VB.NET, ASP)
|
madpitbull_99
|
0
|
1,906
|
3 Agosto 2011, 17:23 pm
por madpitbull_99
|
|
|
Cambiar titulo de un video (Win7)
Multimedia
|
cratps
|
7
|
37,073
|
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
|
9 Junio 2019, 05:45 am
por @XSStringManolo
|
|