Как нарисовать прямо на экране в C #?(Пример вызывает PInvokeStackImbalance) - PullRequest
4 голосов
/ 19 декабря 2011

Я хочу рисовать прямо на рабочем столе (в качестве обоев или над всем, я не против) в 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 ]

2 голосов
/ 19 декабря 2011

Вы можете создать окно верхнего уровня, в котором нет хрома, а затем переместить его в конец z-порядка для текущего набора окон верхнего уровня. Затем вы будете рисовать в клиентской области этого окна, как и любое другое окно C #.

2 голосов
/ 19 декабря 2011

нельзя рисовать прямо на рабочий стол с помощью C #.По сути, вам нужно получить растровое изображение, используемое в качестве обоев, нарисовать его, затем сохранить на диске и установить в качестве активных обоев.1004 * для указателей

...