윈도우용 단말기 크기를 c로 얻는 중?
콘솔 창, 윈도우 아래에서 평 c를 사용하여 ymax와 xmax를 확인하는 방법?
리눅스에는 다음과 같은 코드가 있습니다.
#include <stdio.h>
#include <sys/ioctl.h>
int main (void)
{
struct winsize max;
ioctl(0, TIOCGWINSZ , &max);
printf ("lines %d\n", max.ws_row);
printf ("columns %d\n", max.ws_col);
}
이제 윈도우에 대해서도 어떻게 같은 작업을 할 수 있는지 궁금합니다.나는 노력했다.winioctl.h
그러나 그것은 정의하지 않습니다.struct winsize
비슷한 이름을 가진 다른 어떤 것도.
조언 좀 해주세요.감사해요.
PS. 리눅스에서 콘솔 크기는 다음을 사용하여 찾을 수 있습니다.getenv("LINES");
. 창문 밑에 비슷한 변수가 있습니까?
PPS. 또한 항상 있습니다.ncurses.h
, 두 시스템 모두 작동한다고 생각하지만 다른 라이브러리와 충돌이 발생하여 이를 피하고 있습니다.
PPPS. 여기 이 질문 C에서 단자 폭을 얻는 것은 많은 팁을 가지고 있으므로 반복할 필요가 없습니다.
버퍼가 아닌 콘솔 크기를 인쇄합니다.
#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;
}
이 코드가 작동하는 이유는srWindow
"디스플레이 창의 왼쪽 상단 및 오른쪽 하단 모서리의 콘솔 화면 버퍼 좌표를 contains합니다." 및SMALL_RECT
구조는 MSDN에 따라 "스크린 버퍼 문자 셀의 행과 열을 지정합니다." 콘솔 윈도우의 크기를 얻기 위해 평행한 면을 뺀 것입니다.그때부터.1
실제 값보다 작은 값으로 하나를 추가했습니다.
(부분답변)
코드:
CONSOLE_SCREEN_BUFFER_INFO csbi;
int ret;
ret = GetConsoleScreenBufferInfo(GetStdHandle( STD_OUTPUT_HANDLE ),&csbi);
if(ret)
{
printf("Console Buffer Width: %d\n", csbi.dwSize.X);
printf("Console Buffer Height: %d\n", csbi.dwSize.Y);
}
버퍼의 크기를 지정합니다.유일한 문제는 그것이dwSize.Y
화면 크기가 아닙니다. (여기는 25줄이 아니라 300줄입니다.) 하지만.dwSize.X
열의 번호와 일치합니다.니드만windows.h
일하기 위해.
아래 두 가지 기능은 윈도우 크기를 좀 더 직접적으로 얻을 수 있을 것입니다.
gcc를 사용하여 이 접근 방식과 GetConsoleScreenBufferInfo 프로그램이 파이핑된 경우 모두 작동하지 않는다는 것을 알게 되었습니다.그것은/f가 작동하지 않기 때문에 다소 고통스럽습니다.화면 데이터가 파이프에 저장되어 있지 않은 것 같습니다.
음, 위의 발언은 물론 엄청나게 바보같습니다.;) 파이프의 스크린이 아닌 STDOUT 입니다!즉, STD_ERROR_HANDLE 위에 STD_ERROR_HANDLE을 사용하는 것을 선호합니다.OUTPUT_HANDLE.저는 표준 출력보다 표준 오류를 화면에서 멀리 유도할 가능성이 훨씬 낮습니다.
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;
}
언급URL : https://stackoverflow.com/questions/6812224/getting-terminal-size-in-c-for-windows
'programing' 카테고리의 다른 글
설치된 모든 node.js 모듈의 목록을 인쇄합니다. (0) | 2023.11.01 |
---|---|
Android와 iPhone 둘 다 모바일 앱에서 추천 프로그램을 구현하는 방법 (0) | 2023.11.01 |
LIMT와 함께 MariaDb UPDATE를 찾을 수 없습니다. (0) | 2023.11.01 |
장고, 아약스, jQuery를 사용하여 페이지를 새로 고치지 않고 양식을 제출하는 방법? (0) | 2023.11.01 |
문자열 크기를 바이트 단위로 구하는 방법은? (0) | 2023.11.01 |