首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制台内容

控制台内容
EN

Stack Overflow用户
提问于 2013-01-30 20:46:08
回答 1查看 468关注 0票数 3

我想要获取控制台窗口的内容。我得到了以下代码,但它不工作,,..谁能告诉我如何获取控制台内容(字符)?

代码语言:javascript
复制
    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);
EN

回答 1

Stack Overflow用户

发布于 2016-11-05 08:00:12

这里有一种方法可以做到。GetNumCharsInConsoleBuffer用于获取控制台缓冲区中的字符数。使用该值创建动态分配的数组。最后,ReadConsoleBuffer将用控制台缓冲区的内容填充您的缓冲区。

代码语言:javascript
复制
#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;

}

输出:

代码语言:javascript
复制
Writting
in
the
buffer
Buffer contents:
Writting
in
the
buffer

Appuyez sur une touche pour continuer...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14604366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档