是否可以使用C#控制台而不是C#Forms应用程序在屏幕上创建一个大的白色矩形?
如果可能,它应该覆盖整个屏幕。 我知道我必须使用System.Drawing并尝试了几个步骤,但实际上我的屏幕上都没有打印任何内容!
答案 0 :(得分:50)
您需要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);
这种方法的问题在于,如果屏幕完全刷新,矩形将被覆盖,这对大多数实际应用来说都是无用的。
和以前一样,您需要一个项目参考。这一次是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。如果你想做更复杂的图形,你需要编写一些绘图代码,如this。要使表单背景透明,请将其TransparentKey
设置为与其Backolor
相同。
我刚刚在.NET 4.5和Windows 7中测试了这两个版本,因此对于早期版本可能会有所不同。更多信息here和here。
答案 1 :(得分:5)
是的,可以绘制到屏幕上,但使用最顶层的无边框形式可能更容易。
如果必须,您也可以从控制台应用程序执行此操作,前提是您引用必要的程序集,但这会导致控制台窗口在应用程序的生命周期内保留在屏幕上。
this.TopMost = true;
this.FormBorderStyle = FormBorderStyle.None;
或者我相信您可以创建Window
的实例并在其上调用Show
。
This answer to a different question解释了如何使用GDI +调用直接绘制到屏幕上。
答案 2 :(得分:1)
我理解这个问题的方式,并非以任何有意义的方式实现。我想你可以平台调用user32.dll和gdi32.dll并实现一个经典的Windows UI应用程序,使用消息循环,等等,但是使用Forms会简单得多。你不能这样做的原因是什么?