dibujar en la pantalla sin forma

¿Es posible crear un gran rectángulo blanco en la pantalla con solo usar la consola C # y no una aplicación C # Forms?

Debería cubrir toda la pantalla si es posible. Sé que tengo que usar System.Drawing e intenté varios pasos, ¡pero ninguno imprimirá nada en mi pantalla!

Método 1: Llamar a la API de Windows

Necesita System.Drawing y System.Runtime.InteropServices . Es posible que necesite agregar referencias de proyecto a ellos.

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

Agregue los métodos a su clase con P / Invoke

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

Obtenga un objeto Graphics para toda la pantalla y dibuje un rectángulo con él:

 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); 

El problema con este método es que si la pantalla se actualiza, el rectángulo se sobrescribirá, por lo que es inútil para la mayoría de las aplicaciones prácticas.

Método 2: crear una forma sin bordes

Como antes, necesita una referencia de proyecto. Esta vez a System.Windows.Forms . También necesitará System.Drawing nuevamente:

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

Cree la nueva forma, elimine sus bordes, llene la pantalla con ella y colóquela encima de la barra de tareas:

 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); 

Un posible problema con esto es que el usuario puede simplemente alt + tabular lejos de la ventana. Si desea hacer gráficos más complicados, tendrá que escribir un código de dibujo como este . Para que el fondo del formulario sea transparente, establezca TransparentKey en el mismo Backolor su Backolor .

Acabo de probar ambos en .NET 4.5 y Windows 7, por lo que puede ser diferente para versiones anteriores. Más información aquí y aquí .

Sí, es posible dibujar en la pantalla, pero puede ser más fácil usar una forma superior sin bordes.

También puede hacerlo desde una aplicación de consola, si es necesario, siempre que haga referencia a los ensamblajes necesarios, pero esto daría como resultado que permanezca en la pantalla una ventana de consola durante la vida útil de la aplicación.

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

Alternativamente, creo que puedes crear una instancia de Window y llamar a Show en eso.

Esta respuesta a una pregunta diferente explica cómo usar llamadas GDI + para dibujar directamente en la pantalla.

La forma en que entiendo la pregunta, no es realmente posible de ninguna manera significativa. Supongo que podría invocar la plataforma a user32.dll y gdi32.dll e implementar una aplicación de interfaz de usuario de Windows clásica de esa manera, con el bucle de mensajes, y así sucesivamente, pero sería mucho más simple usar Formularios. ¿Cuál es la razón por la que no puedes hacer eso?