2

GetConsoleScreenBufferInfo()プログラム出力が別のコマンドまたはファイルにリダイレクトされるときに、標準出力で初期化されるとエラーを返します。

プログラムの出力がコンソールに書き込まれているかどうかに関係なく、プログラムが実行されているコンソールへのハンドルを取得し、その幅を取得する方法はありますか?

たぶんGetConsoleWindow()ここに助けがありますが、幅を取得するためにそれが生成するハンドルを使用する方法がわかりません。

4

2 に答える 2

4

あなたの質問はほとんど意味がありません。出力がリダイレクトされる場合、コンソール ウィンドウの幅はまったく問題になりません。リダイレクトされた出力を表示するプログラムのコンソール (存在する場合) のみが重要です。たとえば、メモ帳のウィンドウ サイズを推測することはできません。

ただし、コンソールのハンドルを取得することはできます。CreateFile() を使用する必要があります。

HANDLE hConsole = CreateFile(L"CONOUT$", 
    GENERIC_READ | GENERIC_WRITE,
    0, 0, OPEN_EXISTING, 0, 0);
CONSOLE_SCREEN_BUFFER_INFO info = {0};
BOOL ok = GetConsoleScreenBufferInfo(hConsole, &info);
printf("OK = %d, %d x %d\n", ok, 
    info.srWindow.Right - info.srWindow.Left + 1, 
    info.srWindow.Bottom - info.srWindow.Top + 1);

リダイレクトされたファイルの出力:

OK = 1、80 x 25

于 2012-05-18T23:54:02.917 に答える
2

GetConsoleScreenBufferInfo、特に のsrWindowメンバーを見てくださいCONSOLE_SCREEN_BUFFER

于 2012-05-18T22:00:21.233 に答える