如何在C#中直接在屏幕上绘图? (示例导致PInvokeStackImbalance)

时间:2011-12-19 02:10:08

标签: 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);

    [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给了我这个错误:

  

检测到PInvokeStackImbalance

感谢任何帮助, 感谢

2 个答案:

答案 0 :(得分:2)

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

查看this SO question指针

答案 1 :(得分:2)

您可以创建一个没有任何镶边的顶级窗口,然后将其推送到当前顶级窗口集的z顺序背面。然后,您将像任何其他C#窗口一样绘制到该窗口的客户区域。