Nie ma takiej możliwości chyba poprzez standardowe API Windows. O ile się nie mylę, to jest nowość, która weszła wraz z Windows 10. Zmienić to w dość prosty sposób mógłbyś zapewne poprzez znalezienie np. w assembly x86_64 odpowiedniego adresu i ustawienie jemu wartości na 1 lub 0 w zależności, czy "enabled", czy "disabled". Gdy jednak nie znasz za bardzo języka assembly (niskopoziomowego), to możesz chyba sprawdzić, czy w rejestrze jest ten klucz ustawiony na jakąś wartość (enable), np. true i wtedy za pomocą kodu zmienić go na false i/lub odwrotnie, ale to moim zdaniem tylko obejście. Najlepszym wyborem w tej sytuacji, byłaby opcja numer jeden, ale musiałbyś znać na jakimś poziomie assembly.
Jednak, jeśli opcja pierwsza odpada, to zostaje Ci manipulowanie rejestrem, co może być w niektórych przypadkach chyba niebezpieczne. Zamiast tego możesz wykorzystać poradę/skorzystać z porady ze StackOverflow.
Możliwe, że jest do tego API, ale ciężko jest je znaleźć, gdzieś w odmętach stron internetowych.
https://stackoverflow.com/questions/34210216/how-to-detect-whether-windows-10-buffer-wrapping-mode-is-currently-enabled-in-th
Pozwolę sobie wkleić ten kod z powyższego link'a tutaj poniżej:
int main()
{
// largest possible console size for given font and desktop
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD cd = GetLargestConsoleWindowSize(hOut);
SHORT nScrMaxXch = cd.X,
nScrMaxYch = cd.Y;
// current and max console sizes for given screen buffer
CONSOLE_SCREEN_BUFFER_INFOEX csbix = { sizeof(csbix) };
GetConsoleScreenBufferInfoEx(hOut, &csbix);
SHORT nWndXch = csbix.srWindow.Right - csbix.srWindow.Left + 1,
nWndYch = csbix.srWindow.Bottom - csbix.srWindow.Top + 1;
SHORT nWndMaxXch = csbix.dwMaximumWindowSize.X,
nWndMaxYch = csbix.dwMaximumWindowSize.Y;
wprintf(L"chars: wnd-size %d %d, max-wnd-size %d %d, largest-size %d %d\n",
nWndXch, nWndYch, nWndMaxXch, nWndMaxYch, nScrMaxXch, nScrMaxYch);
// current window size
HWND hWnd = GetConsoleWindow();
RECT rc; GetWindowRect(hWnd, &rc);
LONG nWndXpx = rc.right - rc.left,
nWndYpx = rc.bottom - rc.top;
// max window tracking size
MINMAXINFO mmi = { 0 };
SendMessage(hWnd, WM_GETMINMAXINFO, 0, (LPARAM)&mmi);
LONG nWndMaxXpx = mmi.ptMaxTrackSize.x,
nWndMaxYpx = mmi.ptMaxTrackSize.y;
wprintf(L"pixels: wnd-size %lu %lu, max-tracking-size %lu %lu\n",
nWndXpx, nWndYpx, nWndMaxXpx, nWndMaxYpx);
if (nWndXch == nWndMaxXch // full buffer width, no h-scrollbar
&& nWndXch < nScrMaxXch // not already stretched to full screen width
&& nWndMaxXpx > nWndXpx) // allowed to resized wider
wprintf(L"\n...most likely a Win10 console with ForceV2 enabled\n");
return 0;
}
Nie wiem, czy ten kod działa zgodnie z Twoim zamysłem.
https://docs.microsoft.com/en-us/previous-versions/orphan-topics/ws.11/mt427362(v=ws.11)
Edit:
Kod ze StackOverflow (lekko zmodyfikowałem):
#include <windows.h>
#include <iostream>
#include <cstdio>
int main() {
HKEY hKey;
RegOpenKeyEx(HKEY_CURRENT_USER, "Console", 0, KEY_SET_VALUE, &hKey);
DWORD value = 0; // Here put 0 or 1
printf("%i", RegSetValueEx(hKey, TEXT("LineWrap"), 0, REG_DWORD, (const BYTE*)&value, sizeof(value)));
RegCloseKey(hKey);
return 0;
}
Link do pełnej odpowiedzi ze SO: https://stackoverflow.com/questions/5437800/setting-a-dword-value-in-the-registry
Jeśli wartość nie będzie chciała się zmienić to spróbuj otworzyć konsolę jako Administrator.
Dobrze by było, gdybyś utworzył kopię rejestru (regedit).