Win32API コンソールスクリーンバッファ情報を取得する GetConsoleScreenBufferInfo

コンソールスクリーンバッファ情報を取得するには、GetConsoleScreenBufferInfo関数を用いる。

BOOL GetConsoleScreenBufferInfo(
  HANDLE hConsoleOutput,  // コンソールスクリーンバッファのハンドル
  PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo // スクリーンバッファ情報のアドレス
);


CONSOLE_SCREEN_BUFFER_INFO構造体は、wincon.h に以下のように定義されている。

typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
    COORD dwSize; //スクリーンバッファの文字の列、行のサイズ
    COORD dwCursorPosition; //スクリーンバッファ中のカーソルの座標
    WORD  wAttributes; //クリーンバッファに出力される前景(テキスト)と背景の色の属性.
    SMALL_RECT srWindow; //ディスプレイウィンドウ上のスクリーンバッファの座標
    COORD dwMaximumWindowSize; //コンソールウィンドウの最大サイズ
} CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;



COORD構造体は、同じく wincon.h に以下のように定義されている。

typedef struct _COORD {
    SHORT X;
    SHORT Y;
} COORD, *PCOORD;


SMALL_RECT構造体も、同じく wincon.h に以下のように定義されている。

typedef struct _SMALL_RECT {
    SHORT Left;
    SHORT Top;
    SHORT Right;
    SHORT Bottom;
} SMALL_RECT, *PSMALL_RECT;


使用例

#include <windows.h>
#include <stdio.h>

int main()
{
	BOOL bRet;
	CONSOLE_SCREEN_BUFFER_INFO info;
	
	bRet = GetConsoleScreenBufferInfo(
		              GetStdHandle(STD_OUTPUT_HANDLE), 
		              &info);
	
	if (!bRet) {
          return 1;
        }

	printf("dwSize.X = %u\n", info.dwSize.X);
	printf("dwSize.Y = %u\n", info.dwSize.Y);
	printf("dwCursorPosition.X = %u\n", info.dwCursorPosition.X);
	printf("dwCursorPosition.Y = %u\n", info.dwCursorPosition.Y);
	printf("wAttributes = %u\n", info.wAttributes);
	printf("dwMaximumWindowSize.X = %u\n", info.dwMaximumWindowSize.X);
	printf("dwMaximumWindowSize.Y = %u\n", info.dwMaximumWindowSize.Y);
	printf("srWindow.Bottom = %u\n", info.srWindow.Bottom);
	printf("srWindow.Left = %u\n", info.srWindow.Left);
	printf("srWindow.Right = %u\n", info.srWindow.Right);
	printf("srWindow.Top = %u\n", info.srWindow.Top);

	return 0;
}


参考
http://msdn.microsoft.com/ja-jp/library/cc429297.aspx