Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _UNICODE
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <assert.h>
- #include <conio.h>
- int main(int argc, char** argv) {
- HANDLE consoleInput = GetStdHandle(STD_INPUT_HANDLE);
- HANDLE consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
- assert((consoleInput == INVALID_HANDLE_VALUE) == 0);
- assert((consoleOutput == INVALID_HANDLE_VALUE) == 0);
- assert(SetConsoleMode(consoleInput, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT) == TRUE);
- HANDLE consoleFrontbuffer = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
- HANDLE consoleBackbuffer = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
- assert((consoleFrontbuffer == INVALID_HANDLE_VALUE) == 0);
- assert((consoleBackbuffer == INVALID_HANDLE_VALUE) == 0);
- CONSOLE_SCREEN_BUFFER_INFO frontbufferInfo = {};
- CONSOLE_SCREEN_BUFFER_INFO backbufferInfo = {};
- assert(GetConsoleScreenBufferInfo(consoleFrontbuffer, &frontbufferInfo) != 0);
- assert(GetConsoleScreenBufferInfo(consoleBackbuffer, &backbufferInfo) != 0);
- int bufferWidth = frontbufferInfo.dwSize.X;
- int bufferHeight = frontbufferInfo.dwSize.Y;
- CHAR_INFO* bufferContent = malloc(sizeof(CHAR_INFO) * (bufferWidth * bufferHeight));
- SMALL_RECT bufferRegion = { 0, 0, bufferWidth - 1, bufferHeight - 1 };
- COORD bufferSize = { bufferWidth, bufferHeight };
- COORD writeCoord = { 0, 0 };
- for (int x = 0; x < bufferWidth; x++) {
- for (int y = 0; y < bufferHeight; y++) {
- int index = y * bufferWidth + x;
- bufferContent[index].Attributes = 7 | 0;
- bufferContent[index].Char.AsciiChar = 'X';
- }
- }
- assert(WriteConsoleOutput(consoleFrontbuffer, bufferContent, bufferSize, writeCoord, &bufferRegion) != 0);
- assert(SetConsoleActiveScreenBuffer(consoleFrontbuffer) != 0);
- SleepEx(1000, FALSE);
- for (int x = 0; x < bufferWidth; x++) {
- for (int y = 0; y < bufferHeight; y++) {
- int index = y * bufferWidth + x;
- bufferContent[index].Attributes = 2 | 0;
- bufferContent[index].Char.AsciiChar = 'Y';
- }
- }
- assert(WriteConsoleOutput(consoleBackbuffer, bufferContent, bufferSize, writeCoord, &bufferRegion) != 0);
- assert(SetConsoleActiveScreenBuffer(consoleBackbuffer) != 0);
- SleepEx(1000, FALSE);
- // this part is copy+paste
- // i used a char* previously which also didn't work
- TCHAR _readBuffer[1024];
- DWORD readCharsCount = 0;
- DWORD _readBufferSize = _tcslen(_readBuffer);
- assert(ReadConsole(consoleInput, _readBuffer, _readBufferSize, &readCharsCount, NULL) == TRUE);
- // fprintf(stdout, "readCharsCount %lu\n", readCharsCount);
- // this also doesn't work for me
- // DWORD readEventsCount;
- // INPUT_RECORD irBuffer[1024];
- // assert(ReadConsoleInput(consoleInput, irBuffer, 1024, &readEventsCount) == TRUE);
- // fprintf(stdout, "readEventsCount %lu\n", readEventsCount);
- free(bufferContent);
- CloseHandle(consoleInput);
- CloseHandle(consoleOutput);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment