在屏幕上画出无形体(draw on screen without form)

2019-07-18 08:40发布

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

它应该覆盖整个屏幕,如果可能的。 我知道我必须使用System.Drawing中,并试图几个步骤,但没有人会实际上我的屏幕上打印!

Answer 1:

方法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,所以它可能是早期版本的不同。 更多的信息在这里和这里 。



Answer 2:

是的,它可以绘制到屏幕上,但它可能会更易于使用最顶层,无国界的形式。

您也可以从一个控制台应用程序做到这一点,如果你一定要,为您提供参考必需的组件,但是这将导致剩余的在屏幕上的应用程序的生命控制台窗口。

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

另外我相信你可以创建一个实例Window ,并调用Show这一点。

这回答不同的问题介绍如何使用GDI +调用直接绘制到屏幕上。



Answer 3:

我理解这个问题的方式,这是不是真的有可能以任何有意义的方式。 我想你可以调用平台出来的User32.dll和GDI32.DLL和实施一个经典的Windows UI应用程序的方式,与消息循环,等等,但是这将是一个简单得多,只是使用表单。 什么是你不能做的原因是什么?



文章来源: draw on screen without form