如何直接在Windows桌面上绘制C#?
这个问题已被要求为其他语言,甚至对于其他语言,我已经find了他们的答案缺乏如何做到这一点,干净(没有搞砸屏幕重绘等)。
是否有可能从C#绘制到Windows桌面? 我正在寻找一个例子,如果可能的话。
尝试以下操作:
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Runtime.InteropServices; class Program { [DllImport("User32.dll")] static extern IntPtr GetDC(IntPtr hwnd); [DllImport("User32.dll")] static extern int ReleaseDC(IntPtr hwnd, IntPtr dc); static void Main(string[] args) { IntPtr desktop = GetDC(IntPtr.Zero); using (Graphics g = Graphics.FromHdc(desktop)) { g.FillRectangle(Brushes.Red, 0, 0, 100, 100); } ReleaseDC(IntPtr.Zero, desktop); } }
你可以试试:
Graphics.FromHwnd(IntPtr.Zero)
这将绘制一个矩形,它将出现在屏幕上,直到用户select在任意位置移除它(不会重新绘制)。 它使用隐藏/显示为popup窗口的窗体。
这是当前Windows SDK中UIAVerify.exe
工具背后的代码。
如果您想要使用上述内容,请将以下文件复制到您的项目中:
-
utils\screenboundingrectangle.cs
-
utils\screenrectangle.cs
-
win32\*
可能需要相应地更新命名空间+添加对System.Drawing
+ System.Windows.Forms
引用
然后你可以用下面的代码绘制一个矩形:
namespace Something { public class Highlighter { ScreenBoundingRectangle _rectangle = new ScreenBoundingRectangle(); public void DrawRectangle(Rectangle rect) { _rectangle.Color = System.Drawing.Color.Red; _rectangle.Opacity = 0.8; _rectangle.Location = rect; this._rectangle.Visible = true; } } }
和
var rect = Rectangle.FromLTRB(100, 100, 100, 100); var hi = new Highlighter(); hi.DrawRectangle(rect);