如何在C#中直接在屏幕上绘制?(示例导致Pinvokestack不平衡)

如何在C#中直接在屏幕上绘制?(示例导致Pinvokestack不平衡),c#,desktop,draw,C#,Desktop,Draw,我想直接用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); [Dl

我想直接用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不平衡

感谢您的帮助,
谢谢

您不能用C#直接绘制到桌面。基本上,你需要得到一张用作壁纸的位图,在上面绘制,然后保存到磁盘,并将其设置为活动壁纸


查看指针

您可以创建一个没有任何chrome的顶级窗口,然后将其推到当前顶级窗口集z顺序的后面。然后你会像其他C#窗口一样进入该窗口的客户端区域。

我想你在这里找到了代码?抱歉,不清楚,但“直接”的意思是“不在应用程序的窗口中”。但是如果我想每秒改变10次图像,这是一个好方法吗?