27

Windowsで、プレーンcを使用してコンソールウィンドウでymaxとxmaxをチェックする方法は?

Linux用のこのコードがあります:

#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);
}

今、どうすればWindowsでも同じことができるのだろうか。私は試しましたが、同様の名前を持つ他のものもwinioctl.h定義していません。struct winsize

任意のヒント?ありがとう。

PS。Linux では、 を使用してコンソール サイズを確認することもできますgetenv("LINES");。ウィンドウの下に同様の変数はありますか?

PPS。また、常にncurses.h両方のシステムで動作すると思われますが、私が持っている他のライブラリと競合するため、それを避けています。

PPPS。この質問はこちらCで端末の幅を取得していますか? 多くのヒントがあるので、それを繰り返す必要はありません。

4

3 に答える 3

44

これにより、バッファではなく、コンソールのサイズが出力されます。

#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;
}

このコードが機能するのは、MSDNによるsrWindowと、「表示ウィンドウの左上隅と右下隅のコンソール画面バッファー座標が含まれている」ため、およびSMALL_RECT構造体が「画面バッファー文字セルの行と列を指定する」ためです。コンソールウィンドウのサイズを取得するために、平行な辺を差し引きました。1実際の値よりも少ないので、1つ追加しました。

于 2012-09-28T15:14:43.077 に答える
7

(一部回答)

このコード:

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です。

于 2011-07-25T12:06:25.690 に答える