Sie müssen überlegen, wie Sie zuerst das Rechteck um das Fenster zeichnen, das sich auf den Rest Ihres Codes auswirkt. Der einfachste Weg dazu besteht in der Verwendung eines Formulars, dessen TransparencyKey auf BackColor und FormBorderStyle auf None gesetzt ist.Zeichnen Sie im Paint-Ereignis ein Rechteck, das die gleiche Größe wie das ClientRectangle des Formulars hat. Dadurch erhalten Sie ein sichtbares Rechteck, in dem alles andere transparent ist. Legen Sie die Standort- und Größeneigenschaft des Formulars so fest, dass sie dem von Ihnen gefundenen Fenster entspricht.
Jetzt das Fenster von der Mausposition finden. Sie können WindowFromPoint() nicht verwenden, deaktivierte Fenster werden nicht berücksichtigt. Sie müssen EnumWindows() verwenden. Rufen Sie GetWindowRect() im Callback auf und überprüfen Sie, ob sich die Maus innerhalb des Rechtecks befindet. Achten Sie darauf, das Rechteck-Zeichenfenster zu ignorieren.
Wenn Sie eine Übereinstimmung erhalten, rufen Sie GetWindow() wiederholt mit dem GW_HWNDPREV, um Fenster zu finden, die das gefundene Fenster überlappen. Überprüfen Sie das Rechteck und ignorieren Sie weiterhin das Rechteckfenster.
Dadurch erhalten Sie schließlich das oberste Fenster, auf dem sich der Mauszeiger befindet. Verwenden Sie jetzt ChildWindowFromPoint(), um zu überprüfen, ob sich die Maus in einem unterordneten Fenster befindet, falls vorhanden. Erstellen Sie ggf. Ihr Rechteck-Zeichnungsformular, und weisen Sie ihm dieselbe Größe und denselben Ort wie das gefundene Fenster zu.
Rufen Sie diesen Code vom MouseMove-Ereignis, sagen wir, eine PictureBox, die eine Bulls-Eye-Grafik anzeigt. Setzen Sie die Capture-Eigenschaft in seinem MouseDown-Ereignis auf true.
Schließen Sie die Close() - Methode des Rechtecks im MouseUp-Ereignis.
Das war großartig - vielen Dank. –