Files
NapCatQQ/.pnpm-store/v3/files/e8/c9491da95d94e8afbede947cf72e1c8a1f4c9351d41c7bc5067f8e2dd20b08def45782f08f98ee9eb3d753113dffcc91bf4b1d3dc2e39a5d08c6926dfe2f2d
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

71 lines
1.9 KiB
Plaintext

/*
* This test demonstrates that putting a console into selection mode does not
* block the low-level console APIs, even though it blocks WriteFile.
*/
#define _WIN32_WINNT 0x0501
#include "../src/shared/DebugClient.cc"
#include <windows.h>
#include <stdio.h>
const int SC_CONSOLE_MARK = 0xFFF2;
CALLBACK DWORD writerThread(void*)
{
CHAR_INFO xChar, fillChar;
memset(&xChar, 0, sizeof(xChar));
xChar.Char.AsciiChar = 'X';
xChar.Attributes = 7;
memset(&fillChar, 0, sizeof(fillChar));
fillChar.Char.AsciiChar = ' ';
fillChar.Attributes = 7;
COORD oneCoord = { 1, 1 };
COORD zeroCoord = { 0, 0 };
while (true) {
SMALL_RECT writeRegion = { 5, 5, 5, 5 };
WriteConsoleOutput(GetStdHandle(STD_OUTPUT_HANDLE),
&xChar, oneCoord,
zeroCoord,
&writeRegion);
Sleep(500);
SMALL_RECT scrollRect = { 1, 1, 20, 20 };
COORD destCoord = { 0, 0 };
ScrollConsoleScreenBuffer(GetStdHandle(STD_OUTPUT_HANDLE),
&scrollRect,
NULL,
destCoord,
&fillChar);
}
}
int main()
{
CreateThread(NULL, 0, writerThread, NULL, 0, NULL);
trace("marking console");
HWND hwnd = GetConsoleWindow();
PostMessage(hwnd, WM_SYSCOMMAND, SC_CONSOLE_MARK, 0);
Sleep(2000);
trace("reading output");
CHAR_INFO buf[1];
COORD bufSize = { 1, 1 };
COORD zeroCoord = { 0, 0 };
SMALL_RECT readRect = { 0, 0, 0, 0 };
ReadConsoleOutput(GetStdHandle(STD_OUTPUT_HANDLE),
buf,
bufSize,
zeroCoord,
&readRect);
trace("done reading output");
Sleep(2000);
PostMessage(hwnd, WM_CHAR, 27, 0x00010001);
Sleep(1100);
return 0;
}