无需表单即可在屏幕上绘图

2024-03-29

是否可以在不使用表单应用程序的情况下在屏幕上创建一个大的白色矩形?

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


方法一:调用Windows API

你需要System.Drawing and 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);

Get a 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 again:

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 http://msdn.microsoft.com/en-us/library/55aa1t17%28v=VS.90%29.aspx。要使表单背景透明,请将其设置为TransparentKey与其相同Backolor.

我刚刚在 .NET 4.5 和 Windows 7 中测试了这两个版本,因此早期版本可能会有所不同。更多信息here https://stackoverflow.com/a/3379369/626796 and here https://stackoverflow.com/a/277776/626796.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无需表单即可在屏幕上绘图 的相关文章

随机推荐

  • AutoPostback 与 TextBox 失去焦点

    A TextBox被设定为AutoPostback因为更改值会导致重新计算和显示许多 仅显示 字段 效果很好 但是 当该字段被跳出时 焦点会短暂移动到下一个字段 然后在重新绘制页面时消失 因此任何地方都没有焦点 我希望焦点集中在新字段上 而
  • pandas 和 numpy 的平均值不同

    我有一个 MEMS IMU 我一直在其上收集数据 并使用 pandas 从中获取一些统计数据 每个周期收集 6 个 32 位浮点数 对于给定的收集运行 数据速率是固定的 数据速率在 100Hz 到 1000Hz 之间变化 收集时间长达 72
  • Android 精确闹钟总是关闭 3 分钟

    我有一个应用程序使用AlarmManager定期在整点唤醒手机并向 Android Wear 手表发送消息 然后手表会发出短暂的振动 我有两个用户 他们分别使用安装了 Android 5 1 1 的三星 Galaxy S6 和安装了 5 1
  • 锚定在桌子周围 - 无法在 Outlook 中工作

    我正在为 Mailchimp 开发一份时事通讯 其中一个块的 HTML 结构如下 table border 0 cellpadding 0 cellspacing 0 width 100 align center tr td valign
  • 是否可以获取所有实现接口的类? [复制]

    这个问题在这里已经有答案了 我可以通过反思或类似的方式来做到这一点吗 没有 100 可靠的方法可以做你想做的事 原因是 Java 中类加载的工作方式 Java 中的类是 按需 加载的 第一次在代码中引用类 无论是静态还是动态 时 JVM 将
  • int64_t的宽度,总是64位吗?

    对于以下代码 static inline float fix2float int64 t f return float f 1 lt lt 60 lt error here 编译器向我发出这些警告 warning left shift co
  • Flex 项目均匀分布,但第一个项目左对齐

    弹性盒的justify content space around使我的列表项水平均匀分布 有没有办法拥有完全相同的东西 唯一的区别是左边的第一个项目左边没有空间 也就是说 列表从容器的左边缘 开始 而不是使用justify content
  • kafka Consumer 0.10 向后兼容吗?

    kafka消费者0 10与0 9代理兼容吗 如果我没记错的话 0 9 消费者仍然被认为是测试版 而 0 10 是稳定的 对吗 这就是为什么我有兴趣使用 0 10 版本 但我的代理版本是 0 9 我还不想升级 如果您想使用 0 10 客户端
  • 如何在响应中返回特定字符后关闭 netcat 连接?

    我们有一个非常简单的 TCP 消息传递脚本 它将一些文本发送到服务器端口 该端口返回并显示响应 我们关心的脚本部分看起来像这样 cat someFile netcat somehost 1234 一旦我们获得特定的字符代码 具体来说 001
  • “HttpRequest”不包含“Params”的定义

    我在用着 NET核心2 0 2创建一个ASP NET网络应用程序在C 每次我使用Request Url在我的控制器中 dotnet run输出错误 错误CS1061 HttpRequest 不包含 Url 的定义 并且找不到接受 HttpR
  • 从超类 static main 创建子类

    我有一个通用的抽象类 SuperClass 我想要有一个main方法 这将是每个子类的默认 main 方法 并且会执行相同的操作 但具有派生并调用它的正确子类对象 像这样 public abstract class SuperClass s
  • 错误:行太大:大小 8168,最大大小 8164

    我正在使用 PostgreSql 9 2 我有很多角色 并且所有角色都被授予了模式的 USAGE 权限 当我尝试创建新用户并授予权限时 我收到错误 CREATE ROLE my user GRANT USAGE on schema my s
  • 如何检查 PHP 是否打开了端口 465 和 587?

    我正在尝试使用 PHPMailer 通过 SMTP 和 gmail 发送电子邮件 我使用的确切脚本适用于其他服务器 但不适用于该特定托管公司的服务器 我已经检查过phpinfo 它告诉我allow url fopen is on并且没有di
  • 寻求有关以最小的开销在 Netflix Eureka 可发现的 Spring Boot 服务上进行开发的正确方法的建议

    我们正在运行一个基于 Spring Boot 的环境 其中包含大约 15 个微服务和一个注册到 Eureka 的 Zuul 边缘网关 目前 我已经设置了所有微服务通过 Zuul 网关调用其他微服务 例如 如果 serviceA 需要调用 s
  • 带接收器的 Kotlin 函数参数,从 Groovy 调用

    Kotlin 和 Groovy 都提供了一种编写高阶函数的方法 其中函数参数具有隐式接收器 科特林版本 class KotlinReceiver fun hello println Hello from Kotlin class Kotli
  • 如果值为 null,则在提交之前使用 js 或 jQuery 更改输入文本值

    如果输入值为 null 如何在提交之前使用 js 或 jQuery 更改输入文本值 感谢帮助 With jQuery http jquery com 您可以使用以下命令将回调绑定到提交事件 submit http api jquery co
  • 为什么我应该始终启用编译器警告?

    我经常听说在编译 C 和 C 程序时我应该 始终启用编译器警告 为什么这是必要的 我怎么做 有时我也听说我应该 将警告视为错误 我是不是该 我怎么做 为什么我应该启用警告 众所周知 C 和 C 编译器不善于报告一些常见的程序员错误默认情况下
  • Capybara 无法识别动态添加的 DOM 元素?

    在使用 Capybara 和 Selenium 时 我似乎在测试使用 jQuery 执行的 javascript 操作时遇到了麻烦 预期的行为是当用户单击链接 添加资源 时动态生成表单 Capybara 将能够单击该链接 但无法识别新的表单
  • Greasemonkey:新更新中“未定义 GM_xmlhttpRequest”

    为什么这个简单的 Greasemonkey 脚本对我不起作用https jsfiddle net pghnsw8z 1 https jsfiddle net pghnsw8z 1 我的意思是 在进行 ajax 调用时 我没有得到成功的响应
  • 无需表单即可在屏幕上绘图

    是否可以在不使用表单应用程序的情况下在屏幕上创建一个大的白色矩形 如果可能的话 它应该覆盖整个屏幕 我知道我必须使用System Drawing并尝试了几个步骤 但没有一个真正在我的屏幕上打印任何内容 方法一 调用Windows API 你