【问题标题】:How to draw directly on the screen in C#? (Example causes PInvokeStackImbalance)如何在 C# 中直接在屏幕上绘图? (导致 PInvokeStackImbalance 的示例)
【发布时间】:2011-12-19 02:10:07
【问题描述】:

我想在 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

任何帮助表示赞赏, 谢谢

【问题讨论】:

标签: c# desktop draw


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    查看this SO question 获取指针

    【讨论】:

    • 抱歉不清楚,但“直接”的意思是“不在应用程序的窗口中”。但是,如果我想每秒更改 10 次图像,这会是一个好方法吗?
    猜你喜欢
    • 2014-09-21
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多