どのようにC#で画面に直接描画する? (例はPInvokeStackImbalanceを引き起こす)

私は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);
    }
}

それは実際には赤い四角形を描画しますが、Visual Studioでは1秒以内に次のエラーが表示されます。

PInvokeStackImbalanceが検出されました

どんな助けもありがたいですが、 ありがとう

4
私はあなたがここにそのコードを見つけたと思いますか? Windowsデスクトップで直接描画するには、 stackoverflow .com/questions/1536141 /…
追加された 著者 Zach Johnson,

2 答え

クロムを持たないトップレベルウィンドウを作成して、現在のトップレベルウィンドウセットのzオーダーの背面にプッシュすることができます。次に、他のC#ウィンドウと同様に、そのウィンドウのクライアント領域に描画します。

2
追加された

C#でデスクトップに直接描画することはできません。基本的には、壁紙として使用されているビットマップを取得し、それを描画し、それをディスクに保存し、アクティブな壁紙として設定する必要があります。

ポインターについては、こちらの質問をご覧ください

2
追加された
申し訳ありませんが不明ですが、 '直接'は 'アプリケーションのウィンドウにはありません'を意味します。しかし、もし私が1秒に約10回画像を変えたいなら、これは良い方法でしょうか?
追加された 著者 user835875,