Ciao
Puoi usare sfruttare la classe Graphics appoggiandoti solo a 2 API di Windows: la GetDC e la ReleaseDC. Una volta che hai ottenuto l'handle di un Device Context creato con GetDC, ottieni l'oggetto Graphics col metodo Graphics.FromHdc, quindi puoi usarlo come se fosse un Graphics di una finestra qualsiasi. Quando hai finito di usare il Graphics, chiami il metodo Dispose (o ancora meglio includi la dichiarazione in una using) e rilasci l'handle del DC con ReleaseDC:
[DllImport("user32.dll")]
private static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("user32.dll")]
private static extern bool ReleaseDC(IntPtr hwnd, IntPtr hdc);
/// <summary>
/// Punto di ingresso principale dell'applicazione.
/// </summary>
[STAThread]
static void Main()
{
//Ottieni il Device Context per disegnare sullo schermo intero
//Se al posto di IntPtr.Zero metti l'handle di una finestra,
//ottieni il DC per disegnare su di essa
IntPtr hdc = GetDC(IntPtr.Zero);
//Crei il Graphics dal Device Context dello schermo
using (Graphics g = Graphics.FromHdc(hdc))
{
//Esegui le operazioni di disegno
//Sostituisci con quello che devi fare tu
Pen p = new Pen(Brushes.Black);
Random r = new Random();
int w = (int)g.VisibleClipBounds.Width;
int h = (int)g.VisibleClipBounds.Height;
for (int i = 0; i < 10000; i++)
{
g.DrawLine(p, r.Next(0, w), r.Next(0, h), r.Next(0, w), r.Next(0, h));
}
}
//Rilascia l'HDC ottenuto con GetDC
ReleaseDC(IntPtr.Zero, hdc);
}
Luca