Как задать минимально возможный размер окна консоли, меньше которого пользователь не сможет её уменьшить?! Спасибо за ответ ;)
Самое хорошее и дружественное к пользователю решение — при старте проверить размер консоли, и выдать ошибку. Возможно, предложить пользователю, чтобы программа поменяла размер консоли на удобный ей. (Если размеры поменяются в процессе работы программы, можно следить за изменениями в фоне или при каждом выводе на неё, например, и переспрашивать.)
Менять настройки пользователя без его на то согласия — хулиганское поведение, просто не делайте так. Если программа меняет без спроса мои настройки, я первым делом удаляю её, а потом ищу, где бы оставить злобный отзыв.
Возможно, Вам стоит вставить бесконечный цикл в Ваш метод Main, который будет отслеживать текущий размер окна консоли и в зависимости от размера предпринимать действия: если ширина или высота окна консоли стала меньше допустимой, возможно, тогда уже можно будет вызывать метод Console.SetWindowSize, чтобы установить минимально допустимые размеры окна консоли.
Ни в коем случае не претендую на то, что это абсолютно годный вариант, однако работает. Но при попытке сменить размеры консоли появляются неприятные артефакты перерисовки.
using System;
using System.Threading.Tasks;
namespace ConsoleApp {
class Program {
static void Main() {
Task t = Task.Run(() => {
while (true) {
if (Console.WindowWidth < 50 || Console.WindowHeight < 50) {
Console.SetWindowSize(50, 50);
}
}
});
// Ваш код
t.Wait();
}
}
}
Посмотрите методы Console.WindowWidth и Console.SetWindowSize
Как вариант:
static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
static readonly IntPtr HWND_TOP = new IntPtr(0);
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
const UInt32 SWP_NOZORDER = 0x0004;
const UInt32 SWP_NOREDRAW = 0x0008;
const UInt32 SWP_NOACTIVATE = 0x0010;
const UInt32 SWP_FRAMECHANGED = 0x0020;
const UInt32 SWP_SHOWWINDOW = 0x0040;
const UInt32 SWP_HIDEWINDOW = 0x0080;
const UInt32 SWP_NOCOPYBITS = 0x0100;
const UInt32 SWP_NOOWNERZORDER = 0x0200;
const UInt32 SWP_NOSENDCHANGING = 0x0400;
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
static void Main(string[] args)
{
IntPtr ConsoleHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
const UInt32 WINDOW_FLAGS = SWP_SHOWWINDOW;
Task t = new Task( () => {
while (true)
SetWindowPos(ConsoleHandle, HWND_NOTOPMOST, 0, 0, 100, 200, WINDOW_FLAGS);
});
t.Start();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
последовательность такая, проверяем размер каталога, запоминаем, через некоторое время снова проверяем, сравниваем и по результату что то делаем