Вам нужно будет подумать, как вы будете сначала рисовать прямоугольник вокруг окна, что влияет на остальную часть вашего кода. Самый простой способ сделать это - использовать Form, для которой для TransparencyKey установлено значение BackColor, а для FormBorderStyle установлено значение None. Нарисуйте прямоугольник в событии Paint, того же размера, что и форма ClientRectangle, и вы получите видимый прямоугольник со всем остальным прозрачным. Задайте свойство формы и размер формы в соответствии с найденным окном.
Теперь находим окно с позиции мыши. Вы не можете использовать WindowFromPoint (), он не учитывает отключенные окна. Вам нужно будет использовать EnumWindows (). В обратном вызове вызовите GetWindowRect () и проверьте, находится ли мышь внутри прямоугольника. Обязательно игнорируйте окно рисования прямоугольника.
Когда вы получите совпадение, теперь несколько раз вызывайте GetWindow () с GW_HWNDPREV, чтобы найти окна, которые перекрывают найденное вами окно. Продолжайте проверять прямоугольник и продолжайте игнорировать окно прямоугольника.
В конечном итоге вы получите окно верхнего уровня, на котором находится курсор мыши. Теперь используйте ChildWindowFromPoint (), чтобы проверить, находится ли мышь на дочернем окне, если оно есть. При необходимости создайте форму для рисования прямоугольника и присвойте ей тот же размер и местоположение, что и у найденного окна.
Вызовите этот код из события MouseMove, скажем, PictureBox, которое отображает графику «бычьего глаза». Установите для его свойства Capture значение true в событии MouseDown.
Закройте метод Close () формы рисования прямоугольника в событии MouseUp.