如何在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失衡

感谢任何帮助,由于

如何在c#中直接在屏幕上绘制?(示例导致pinvokestack失衡)

您可以创建一个没有任何chrome的顶层窗口,然后将其推到当前顶层窗口集的z轴顺序的后面。然后你就可以像其他c#窗口一样绘制到该窗口的客户端区域。

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

看看指针的SO问题