Рисовать на экране без формы - программирование
Подтвердить что ты не робот

Рисовать на экране без формы

Возможно ли создать большой белый прямоугольник на экране с помощью только консоли С#, а не С# Forms Application?

Он должен покрывать весь экран, если это возможно. Я знаю, что я должен использовать System.Drawing и пробовал несколько шагов, но никто на самом деле ничего не выводит на экран!

4b9b3361

Ответ 1

Способ 1. Вызовите Windows API

Вам нужны System.Drawing и System.Runtime.InteropServices. Возможно, вам придется добавить ссылки на проекты.

using System.Runtime.InteropServices;
using System.Drawing;

Добавьте методы в свой класс с помощью P/Invoke

[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern void ReleaseDC(IntPtr hwnd, IntPtr dc);

Получите объект Graphics для всего экрана и нарисуйте с ним прямоугольник:

IntPtr desktopPtr = GetDC(IntPtr.Zero);
Graphics g = Graphics.FromHdc(desktopPtr);

SolidBrush b = new SolidBrush(Color.White);
g.FillRectangle(b, new Rectangle(0, 0, 1920, 1080));

g.Dispose();
ReleaseDC(IntPtr.Zero, desktopPtr);

Проблема с этим методом заключается в том, что если экран вообще обновится, прямоугольник будет перезаписан, что делает его бесполезным для большинства практических приложений.

Способ 2. Создание формы без полей.

Как и раньше, вам нужна ссылка на проект. На этот раз в System.Windows.Forms. Вам снова понадобится System.Drawing:

using System.Drawing;
using System.Windows.Forms;

Создайте новую форму, удалите ее границы, заполните экран и установите ее поверх панели задач:

Form f = new Form();
f.BackColor = Color.White;
f.FormBorderStyle = FormBorderStyle.None;
f.Bounds = Screen.PrimaryScreen.Bounds;
f.TopMost = true;

Application.EnableVisualStyles();
Application.Run(f);

Возможная проблема заключается в том, что пользователь может просто добавить + вкладку в окно. Если вы хотите сделать более сложную графику, вам нужно написать код чертежа, как это. Чтобы сделать фоном прозрачным, установите его TransparentKey таким же, как и Backolor.

Я только что протестировал их в.NET 4.5 и Windows 7, поэтому для более ранних версий он может отличаться. Дополнительная информация здесь и здесь.

Ответ 2

Да, можно рисовать на экране, но может быть проще использовать самую верхнюю безграничную форму.

Вы также можете сделать это из консольного приложения, если необходимо, предоставив ссылку на необходимые сборки, но это приведет к тому, что окно консоли останется на экране в течение всего срока службы приложения.

this.TopMost = true;
this.FormBorderStyle = FormBorderStyle.None;

В качестве альтернативы, я считаю, что вы можете создать экземпляр Window и вызвать Show.

Этот ответ на другой вопрос объясняет, как использовать вызовы GDI + для рисования непосредственно на экране.

Ответ 3

То, как я понимаю вопрос, который невозможен каким-либо значимым образом. Я полагаю, вы могли бы вызывать платформу для user32.dll и gdi32.dll и реализовывать классическое приложение для Windows UI таким образом, с контуром сообщений и т.д., Но было бы намного проще использовать Forms. Какую причину вы не можете сделать?