3

コンソールウィンドウの内容を取得したい。次のコードを取得しましたが、機能していません..コンソールの内容(キャラクター)を取得する方法を誰か教えてもらえますか?????

    DWORD nLength=2;
    HWND hWnd = FindWindow("ConsoleWindowClass",NULL);
    LPTSTR lpCharacter=" ";
    COORD dwReadCoord;
    dwReadCoord.X=11;
    dwReadCoord.Y=11;
    LPDWORD lpNumberOfCharsRead=0;
    bool a= ReadConsoleOutputCharacter(hWnd,lpCharacter,nLength,dwReadCoord,lpNumberOfCharsRead);
4

1 に答える 1

0

ここにそれを行う方法があります。GetNumCharsInConsoleBufferコンソール バッファ内の文字数を取得することです。その値で動的に割り当てられた配列を作成します。最後ReadConsoleBufferに、バッファをコンソール バッファの内容で埋めます。

#include <cstdio>
#include <cstdlib>
#include <Windows.h>

DWORD GetNumCharsInConsoleBuffer()
{
    CONSOLE_SCREEN_BUFFER_INFO buffer_info;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &buffer_info);
    return (DWORD)((buffer_info.dwSize.X * ( buffer_info.dwCursorPosition.Y + 1)) - (buffer_info.dwSize.X - (buffer_info.dwCursorPosition.X  + 1)));
}

DWORD ReadConsoleBuffer(char* buffer, DWORD bufsize)
{
    DWORD num_character_read = 0;
    COORD first_char_to_read = {0};  
    ReadConsoleOutputCharacterA(GetStdHandle(STD_OUTPUT_HANDLE), buffer, bufsize, first_char_to_read, &num_character_read);
    buffer[bufsize-1] = '\0';

    return num_character_read;
}

int main(int argc, char** argv)
{
    fprintf(stdout, "Writting\nin\nthe\nbuffer\n");

    DWORD bufsize = GetNumCharsInConsoleBuffer();   
    char* buffer = new char[bufsize];
    memset(buffer, 0, bufsize);

    ReadConsoleBuffer(buffer, bufsize);    
    puts("\nBuffer contents:");
    puts(buffer);

    delete[] buffer;
    system("pause"); 
    return 0;

}

出力:

Writting
in
the
buffer
Buffer contents:
Writting
in
the
buffer

Appuyez sur une touche pour continuer...
于 2016-11-05T00:00:12.167 に答える