Guest User

Untitled

a guest
Oct 2nd, 2024
6
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.17 KB | Source Code | 0 0
  1.  
  2. #define _UNICODE
  3.  
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <windows.h>
  8. #include <assert.h>
  9. #include <conio.h>
  10.  
  11.  
  12. int main(int argc, char** argv) {
  13.     HANDLE consoleInput = GetStdHandle(STD_INPUT_HANDLE);
  14.     HANDLE consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
  15.     assert((consoleInput == INVALID_HANDLE_VALUE) == 0);
  16.     assert((consoleOutput == INVALID_HANDLE_VALUE) == 0);
  17.     assert(SetConsoleMode(consoleInput, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT) == TRUE);
  18.    
  19.     HANDLE consoleFrontbuffer = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
  20.     HANDLE consoleBackbuffer = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
  21.     assert((consoleFrontbuffer == INVALID_HANDLE_VALUE) == 0);
  22.     assert((consoleBackbuffer == INVALID_HANDLE_VALUE) == 0);
  23.  
  24.     CONSOLE_SCREEN_BUFFER_INFO frontbufferInfo = {};
  25.     CONSOLE_SCREEN_BUFFER_INFO backbufferInfo = {};
  26.     assert(GetConsoleScreenBufferInfo(consoleFrontbuffer, &frontbufferInfo) != 0);
  27.     assert(GetConsoleScreenBufferInfo(consoleBackbuffer, &backbufferInfo) != 0);
  28.    
  29.     int bufferWidth = frontbufferInfo.dwSize.X;
  30.     int bufferHeight = frontbufferInfo.dwSize.Y;
  31.     CHAR_INFO* bufferContent = malloc(sizeof(CHAR_INFO) * (bufferWidth * bufferHeight));
  32.     SMALL_RECT bufferRegion = { 0, 0, bufferWidth - 1, bufferHeight - 1 };
  33.     COORD bufferSize = { bufferWidth, bufferHeight };
  34.     COORD writeCoord = { 0, 0 };
  35.  
  36.     for (int x = 0; x < bufferWidth; x++) {
  37.         for (int y = 0; y < bufferHeight; y++) {
  38.             int index = y * bufferWidth + x;
  39.             bufferContent[index].Attributes = 7 | 0;
  40.             bufferContent[index].Char.AsciiChar = 'X';
  41.         }
  42.     }    
  43.  
  44.     assert(WriteConsoleOutput(consoleFrontbuffer, bufferContent, bufferSize, writeCoord, &bufferRegion) != 0);
  45.     assert(SetConsoleActiveScreenBuffer(consoleFrontbuffer) != 0);
  46.     SleepEx(1000, FALSE);
  47.  
  48.     for (int x = 0; x < bufferWidth; x++) {
  49.         for (int y = 0; y < bufferHeight; y++) {
  50.             int index = y * bufferWidth + x;
  51.             bufferContent[index].Attributes = 2 | 0;
  52.             bufferContent[index].Char.AsciiChar = 'Y';
  53.         }
  54.     }
  55.  
  56.     assert(WriteConsoleOutput(consoleBackbuffer, bufferContent, bufferSize, writeCoord, &bufferRegion) != 0);
  57.     assert(SetConsoleActiveScreenBuffer(consoleBackbuffer) != 0);
  58.     SleepEx(1000, FALSE);
  59.  
  60.     // this part is copy+paste
  61.     // i used a char* previously which also didn't work
  62.     TCHAR _readBuffer[1024];
  63.     DWORD readCharsCount = 0;
  64.     DWORD _readBufferSize = _tcslen(_readBuffer);
  65.     assert(ReadConsole(consoleInput, _readBuffer, _readBufferSize, &readCharsCount, NULL) == TRUE);
  66.     // fprintf(stdout, "readCharsCount %lu\n", readCharsCount);
  67.  
  68.     // this also doesn't work for me
  69.     // DWORD readEventsCount;
  70.     // INPUT_RECORD irBuffer[1024];
  71.     // assert(ReadConsoleInput(consoleInput, irBuffer, 1024, &readEventsCount) == TRUE);
  72.     // fprintf(stdout, "readEventsCount %lu\n", readEventsCount);
  73.  
  74.     free(bufferContent);
  75.     CloseHandle(consoleInput);
  76.     CloseHandle(consoleOutput);
  77.  
  78.     return EXIT_SUCCESS;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment