Console Application C#

217
07 марта 2018, 04:50

Как задать минимально возможный размер окна консоли, меньше которого пользователь не сможет её уменьшить?! Спасибо за ответ ;)

Answer 1

Самое хорошее и дружественное к пользователю решение — при старте проверить размер консоли, и выдать ошибку. Возможно, предложить пользователю, чтобы программа поменяла размер консоли на удобный ей. (Если размеры поменяются в процессе работы программы, можно следить за изменениями в фоне или при каждом выводе на неё, например, и переспрашивать.)

Менять настройки пользователя без его на то согласия — хулиганское поведение, просто не делайте так. Если программа меняет без спроса мои настройки, я первым делом удаляю её, а потом ищу, где бы оставить злобный отзыв.

Answer 2

Возможно, Вам стоит вставить бесконечный цикл в Ваш метод Main, который будет отслеживать текущий размер окна консоли и в зависимости от размера предпринимать действия: если ширина или высота окна консоли стала меньше допустимой, возможно, тогда уже можно будет вызывать метод Console.SetWindowSize, чтобы установить минимально допустимые размеры окна консоли.

Answer 3

Ни в коем случае не претендую на то, что это абсолютно годный вариант, однако работает. Но при попытке сменить размеры консоли появляются неприятные артефакты перерисовки.

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();
        }
    }
}
Answer 4

Посмотрите методы Console.WindowWidth и Console.SetWindowSize

Answer 5

Как вариант:

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();
            }
READ ALSO
Нужно узнать размер папки

Нужно узнать размер папки

последовательность такая, проверяем размер каталога, запоминаем, через некоторое время снова проверяем, сравниваем и по результату что то делаем

185
Как сделать Drag для всех div?

Как сделать Drag для всех div?

как сделать перетаскивание всех div элементов?

293