Ahora me pregunto cómo puedo hacer lo mismo para Windows. Lo intenté winioctl.h pero no define struct winsize ni ningún otro con un nombre similar.
¿Algun consejo? Gracias.
PD. En Linux también puedes encontrar el tamaño de la consola usando getenv("LINES");. ¿Hay una variable similar en Windows?
PPS. Además, siempre hay ncurses.hque supongo que funciona en ambos sistemas, pero lo estoy evitando debido a conflictos con otras bibliotecas que tengo.
PPP. Esta pregunta aquí ¿Obtener el ancho del terminal en C? tiene un montón de consejos, así que no hay necesidad de repetir eso.
cuántico
Esto imprime el tamaño de la consola, no el búfer:
Este código funciona porque srWindow “contiene las coordenadas del búfer de la pantalla de la consola de las esquinas superior izquierda e inferior derecha de la ventana de visualización”, y el SMALL_RECT estructura “especifique las filas y columnas de las celdas de caracteres del búfer de pantalla” según MSDN. Resté los lados paralelos para obtener el tamaño de la ventana de la consola. desde que tengo 1 menos que el valor real, agregué uno.
Tengo poco tiempo para probarlo, pero parece que esta es la respuesta correcta a la pregunta. ¿Le importaría señalar la diferencia entre esta respuesta y la actualmente aceptada que muestra el tamaño del búfer? ¡Gracias!
– DrBeco
30 de septiembre de 2012 a las 20:07
@DrBeco En la mayoría de los casos, el tamaño del búfer de su respuesta y la ventana de visualización mencionada en esta respuesta tienen el mismo ancho, aunque esto no es obligatorio. Sin embargo, como observa, el búfer y las ventanas pueden tener, y a menudo tienen, diferentes alturas; esto es lo que proporciona la capacidad de desplazarse hacia atrás en una sesión de consola de Windows. Me resulta más fácil pensar en términos de un búfer grande, con una ventana de visualización más pequeña que puede ver cualquier sección del búfer principal.
– dnuff
18/03/2016 a las 21:42
Exactamente lo que estaba buscando. +1
– Xam
30 de marzo de 2018 a las 23:18
O podría usar CONSOLE_SCREEN_BUFFER_INFO.dwSize.X y .Y para abreviar.
– RhetoricalRuvim
1 ago. 2019 a las 18:31
Si STDOUT se redirige a un archivo, entonces el GetConsoleScreenBufferInfo() devolución de llamadas FALSEpor lo que debe ser probado.
Da el tamaño del búfer. El único problema es que dwSize.Y no es realmente el tamaño de la pantalla (300 aquí en lugar de 25 líneas). Pero dwSize.X coincide con el número de la columna. solo necesidades windows.h trabajar.
León van Dommelen
Las siguientes dos funciones obtendrán el tamaño de la ventana algo más directamente.
Tenga en cuenta que encontré, usando gcc, que ni este enfoque ni GetConsoleScreenBufferInfo funcionan si el programa está canalizado. Eso es algo molesto en cuanto a / f, entonces tampoco funciona. Aparentemente, los datos de la pantalla no están disponibles en una tubería.
Um, el comentario anterior es, por supuesto, enormemente estúpido. 😉 ¡Es STDOUT que no es la pantalla en una tubería! Eso significa que prefiero usar STD_ERROR_HANDLE antes que STD_OUTPUT_HANDLE. Es mucho menos probable que dirija el error estándar lejos de la pantalla que la salida estándar.
typedef struct _CONSOLE_FONT_INFO {
DWORD nFont;
COORD dwFontSize;
} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
BOOL WINAPI GetCurrentConsoleFont(
HANDLE hConsoleOutput,
BOOL bMaximumWindow,
PCONSOLE_FONT_INFO lpConsoleCurrentFont
);
/* Get the window width */
int getww_(void)
{
CONSOLE_FONT_INFO info;
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &info);
return info.dwFontSize.X;
}
/* Get the window height */
int getwh_(void)
{
CONSOLE_FONT_INFO info;
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &info);
return info.dwFontSize.Y;
}
Como se trata de un fragmento, agrego #include y main() para imprimir getww() y getwh(). Cuando ejecuto eso, obtengo el tamaño de la FUENTE que se está utilizando, 12×7, NO el tamaño de la consola. ¿Estoy haciendo algo mal?
– cniggeler
29 de abril de 2021 a las 13:31
+1 por sugerir STD_ERROR_HANDLE para que el código de @quantum funcione si lo usa en un script o si necesita canalizar la salida.
– cniggeler
29 de abril de 2021 a las 13:38
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información