Очень отрицательные значения из GetWindowRect для окон Explorer при использовании VirtuaWin

[Я нашел ответ на этот вопрос, но я все равно спрашиваю его, чтобы, если у кого-то еще была такая же проблема, он мог ее найти. Ответ, чтобы следовать через минуту или около того после вопроса.]

Я взломал что-то, что перечисляет каждое окно в моем окне Windows, и кажется, что для (только) одного из моих окон GetWindowRect возвращает прямоугольник с очень отрицательными координатами y.

Возможные сложности: (1) у меня несколько мониторов, но (1a) координата y очень отрицательна, порядка -24000, и (1b) другие окна на обоих мониторах не показывают этого эффекта; (2) я использую инструмент виртуального рабочего стола VirtuaWin, но (2a) другие окна на нескольких виртуальных рабочих столах и на обоих мониторах не показывают этого эффекта; (3) Я делаю все это на Python, используя модули pywin32.

Данное окно является окном Windows Explorer. Это не необычный размер или размещенный (на глаз, по крайней мере). Окна проводника на текущем активном виртуальном рабочем столе не показывают такое поведение, но когда я создаю окна проводника на других виртуальных рабочих столах, они показывают тот же неожиданный эффект.

Я использую Windows XP и версию 4.3 VirtuaWin.

Так, что происходит?

1 ответ

Решение

Итак, оказывается, что это не имеет ничего общего с Python или несколькими мониторами. VirtuaWin имеет два различных способа скрыть окна на устаревших виртуальных рабочих столах. Один из них включает в себя сокрытие окон; другой включает в себя возиться с их координатами, чтобы переместить их за экран.

Метод координатного искажения используется для окон Windows Explorer (а также, я полагаю, окон для некоторых версий Internet Explorer), потому что эти приложения, если вы скрываете окно, а затем создаете новое, закрывают ранее скрытое окно!

Соответственно версии VirtuaWin начиная с версии 2.6 и выше перемещают окна, принадлежащие этим приложениям, за пределы экрана, а не скрывают их.

В результате у y-координат этих окон вычитается 25000 из их "истинных" значений.

Другие вопросы по тегам