Juste un avertissement avant de commencer que la solution ne va pas être assez, autant que je sache, vous ne pouvez pas le faire complètement dans le code managé.
Maintenant:
Afin d'intercepter les messages à une autre application que vous allez avoir besoin de faire des appels natifs à l'aide user32.dll. Si vous voulez comprendre tout cela à la dure, vous voulez commencer par SetWindowsHookEx. En supposant que vous n'êtes pas un masochiste, il y a une belle bibliothèque C# que j'ai trouvée sur CodeProject qui rendra la vie beaucoup plus facile que d'essayer manuellement d'intercepter ces messages vous-même. Configurer un rappel pour les messages de la souris avec les coordonnées X et Y pour la position de la souris, vous pouvez déterminer si elle est dans les limites de votre Rectangle
en utilisant sa méthode Contains
.
specifiedRegion.Contains(mouseLocation); //where mouseLocation is a Point
User32 a aussi les fonctions que vous aurez besoin d'obtenir un contexte de périphérique pour l'écran:
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern void ReleaseDC(IntPtr dc);
Pour obtenir le DC de l'écran, utilisez l'appel suivant à GetDC
:
IntPtr screenDC = GetDC(IntPtr.Zero);
Avec ce DC, nous pouvons obtenir notre objet C# Graphics
et commencer à dessiner.
Graphics g = Graphics.FromHdc(screenDC);
Rappelez-vous de disposer l'objet Graphics
et relâchez le DC après avoir terminé avec elle ou vous aurez une fuite de mémoire.
g.Dispose();
ReleaseDC(screenDC);
N'est-ce pas un panneau * invisible * situé sur une forme * invisible * séparée? Cela ne me semble pas si simple. (Il y a des façons de le faire, cependant) – Justin