c++ - 控制台内容

标签 c++ winapi

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

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

最佳答案

这是一种方法。 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...

关于c++ - 控制台内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14604366/

相关文章:

c++ - 将两个缓冲区合并为 Win32 管道上的单个写入

c# - 如何使用 Win32 图标

c++ - 如何获取进程相对时间

c++ - WinAPI 窗口消息似乎被插件窃取 - 如何修复?

c++ - 你如何着手制作基于 tcp 的可靠 udp 协议(protocol)?

c++ - const 内的非 const

C++:对象和数组/循环

c++ - cusp继承Class和*.cu设备代码编译

c++ - Null<std::string> 问题

c# - 在 WndProc 中未获取 Windows 8 WM_POINTER* 事件