programing

윈도우용 단말기 크기를 c로 얻는 중?

javamemo 2023. 11. 1. 21:56
반응형

윈도우용 단말기 크기를 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

반응형