her*_*tao 29
在Windows上,使用以下代码打印控制台窗口的大小(从此处借用):
#include <windows.h>
int main(int argc, char *argv[])
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
int columns, rows;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
printf("columns: %d\n", columns);
printf("rows: %d\n", rows);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Linux上,使用以下代码(从这里借用):
#include <sys/ioctl.h>
#include <stdio.h>
#include <unistd.h>
int main (int argc, char **argv)
{
struct winsize w;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
printf ("lines %d\n", w.ws_row);
printf ("columns %d\n", w.ws_col);
return 0; // make sure your main returns int
}
Run Code Online (Sandbox Code Playgroud)
Mos*_*ieb 21
Linux/unix:使用ioctl(2)标准输出文件编号TIOCGWINSZ和GetConsoleScreenBufferInfo().
#include <sys/ioctl.h> //ioctl() and TIOCGWINSZ
#include <unistd.h> // for STDOUT_FILENO
// ...
struct winsize size;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &size);
/* size.ws_row is the number of rows, size.ws_col is the number of columns. */
// ...
Run Code Online (Sandbox Code Playgroud)
此外,虽然我在过去5年没有触摸过Windows,但ioctl(2)应该可以帮助您获得当前的控制台大小.
为 Windows 扩展 @herohuyongtao 答案。.srWindow 属性给出了控制台窗口大小的答案,即可见行和列。这并没有说明实际可用的屏幕缓冲区宽度和高度是多少,如果窗口包含滚动条,则可能会更大。如果是这种情况,请使用 .dwSize:
CONSOLE_SCREEN_BUFFER_INFO sbInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &sbInfo);
int availableColumns = sbInfo.dwSize.X;
int availableRows = sbInfo.dwSize.Y;
Run Code Online (Sandbox Code Playgroud)
这是一个适用于 Windows 和 Linux 的解决方案:
#if defined(_WIN32)
#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN
#include <Windows.h>
#elif defined(__linux__)
#include <sys/ioctl.h>
#endif // Windows/Linux
void get_terminal_size(int& width, int& height) {
#if defined(_WIN32)
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
width = (int)(csbi.srWindow.Right-csbi.srWindow.Left+1);
height = (int)(csbi.srWindow.Bottom-csbi.srWindow.Top+1);
#elif defined(__linux__)
struct winsize w;
ioctl(fileno(stdout), TIOCGWINSZ, &w);
width = (int)(w.ws_col);
height = (int)(w.ws_row);
#endif // Windows/Linux
}
#include <iostream>
using namespace std;
int main() {
int width=0, height=0;
get_terminal_size(width, height);
cout << "width=" << width << ", height=" << height << endl;
cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24684 次 |
| 最近记录: |