画在屏幕上没有forms

只使用C#控制台而不是C#Forms应用程序,是否可以在屏幕上创建一个大的白色矩形?

如果可能,它应该覆盖整个屏幕。 我知道我必须使用System.Drawing并尝试了几个步骤,但没有人会在我的屏幕上打印任何东西!

方法1:调用Windows API

您需要System.DrawingSystem.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); 

一个可能的问题是用户只能远离窗口alt + tab。 如果你想做更复杂的图形,你需要写一些这样的绘图代码。 要使表单背景透明,请将其TransparentKey设置为与Backolor相同。

我刚刚在.NET 4.5和Windows 7中测试了这两个版本,因此对于早期版本可能会有所不同。 更多信息在这里和这里 。

是的,可以绘制到屏幕上,但使用最顶部的无边框forms可能更容易。

如果必须,您也可以从控制台应用程序执行此操作,前提是您引用必要的程序集,但这会导致控制台窗口在应用程序的生命周期内保留在屏幕上。

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

或者我相信你可以创建一个Window实例并在其上调用Show

这个对不同问题的回答解释了如何使用GDI +调用直接绘制到屏幕上。

我理解这个问题的方式,不是以任何有意义的方式实现的。 我想你可以平台调用user32.dll和gdi32.dll并实现一个经典的Windows UI应用程序,使用消息循环等等,但是使用Forms会简单得多。 你不能这样做的原因是什么?