Tendrá que considerar primero cómo dibujar el rectángulo alrededor de la ventana, que afecta al resto de su código. La forma más sencilla de hacerlo es mediante el uso de un formulario que tenga su TransparencyKey configurado en BackColor y FormBorderStyle establecido en None.Dibuje un rectángulo en el evento Paint, del mismo tamaño que el ClientRectangle del formulario, que le proporciona un rectángulo visible con todo lo demás transparente. Establezca la propiedad Ubicación y Tamaño del formulario para que coincida con la ventana que encontró.
Ahora encontrando la ventana desde la posición del mouse. No puede usar WindowFromPoint(), no considera las ventanas deshabilitadas. Tendrá que usar EnumWindows(). En la devolución de llamada, llame a GetWindowRect() y compruebe si el mouse se encuentra dentro del rectángulo. Asegúrese de ignorar su ventana de dibujo rectangular.
Cuando obtiene una coincidencia, ahora llame a GetWindow() repetidamente con el GW_HWNDPREV para encontrar las ventanas que se superponen a la ventana que encontró. Sigue revisando el rectángulo y sigue ignorando la ventana de tu rectángulo.
Esto finalmente le proporciona la ventana de nivel superior en la que se encuentra el cursor del mouse. Ahora use ChildWindowFromPoint() para verificar si el mouse está en una ventana secundaria, si hay alguna. Crea tu forma de dibujo rectangular, si es necesario, y dale el mismo tamaño y ubicación que la ventana encontrada.
Llame este código del evento MouseMove de, por ejemplo, un PictureBox que muestra un gráfico de diana. Establezca su propiedad Capture en verdadero en su evento MouseDown.
Cierre el método Close() de su formulario de dibujo rectangular en el evento MouseUp.
Esto fue genial, muchas gracias. –