如何在c#中直接在屏幕上绘制?(示例导致pinvokestack失衡)
本文关键字:pinvokestack 失衡 绘制 屏幕 | 更新日期: 2023-09-27 18:18:09
我想在c#中直接在桌面上绘制(作为壁纸或整体,我不介意),但我没有能够找到如何。我发现了这个:
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 void ReleaseDC(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(desktop);
}
}
它实际上画了一个红色矩形但是在1秒内,Visual Studio给了我这个错误:
检测到pinvokestack失衡
感谢任何帮助,由于
您可以创建一个没有任何chrome的顶层窗口,然后将其推到当前顶层窗口集的z轴顺序的后面。然后你就可以像其他c#窗口一样绘制到该窗口的客户端区域。
你不能直接用c#绘制到桌面。基本上,你需要获取被用作壁纸的位图,在其上绘制,然后将其保存到磁盘并设置为活动壁纸。
看看指针的SO问题