(по всем средним значениям необходимо перемаркировать соответствующую технологию: я не знаю, какие из них:)
Я, вероятно, приеду позже с более подробными вопросами, о конкретных деталях, но пока я пытаюсь понять "большую картину": я ищу способ перечислить "реальные видимые окна" в Windows. Под "реальным видимым окном" я имею в виду именно то, что пользователь назовет "окном". Мне нужен способ получить список всех этих видимых окон в Z-порядке.
Обратите внимание, что мне действительно нужно выполнить do. Я уже делал это на OS X (где это настоящая головная боль, особенно если вы хотите поддерживать OS X 10.4, потому что OS X не имеет удобного API окон), и теперь мне нужно сделать это под Windows.
Вот пример, предположим, что на экране есть три видимых окна, например:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A +--------------------------+
| | | |
| C | | B |
| | +--------------------------+
| | | |
+-----------| |----------------+
| |
+-------------+
Затем мне нужно вернуть список, подобный этому:
windows B is at (210,40)
windows A is at (120,20)
windows C is at (0,0)
Затем, если пользователь (или ОС) приносит окно A вперед, оно становится:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A |---------------------+
| | | |
| C | | B |
| | |---------------------+
| | | |
+-----------| |----------------+
| |
+-------------+
И я получаю (в идеале) обратный вызов, дающий мне это:
windows A is at (120,20)
windows B is at (210,40)
windows C is at (0,0)
Для этого в OS X требуется использование удивительно странных хаков (например, чтобы пользователь включил "Включить доступ для вспомогательного устройства"!), но я сделал это под OS X, и он работает (в OS X, я не удалось получить обратный вызов каждый раз, когда происходят некоторые изменения окна, поэтому я опрос, но я получил его для работы).
Теперь я хочу сделать это под Windows (я действительно делаю, не вопрос), и у меня есть несколько вопросов:
-
Можно ли это сделать?
-
Есть ли хорошо документированные API Windows (и работают по их спецификациям), позволяющие это сделать?
-
Легко ли регистрировать обратный вызов каждый раз, когда изменяется окно? (при изменении размера, перемещении, возврате/переднем или всплывании нового окна и т.д.)
-
что бы получилось?
Я знаю, что этот вопрос не является конкретным, поэтому я попытался как можно яснее описать свою проблему (включая хорошее искусство ASCII, для которого вы можете это продвинуть): пока я смотрю на "большую картинку" ". Я хочу знать, что такое происходит в Windows.
Бонусный вопрос: представьте, что вам нужно будет написать крошечный файл .exe, который записывает имена/положение/размер окна во временный файл каждый раз, когда на экране появляется изменение окна, как долго эта программа будет примерно на вашем языке выбора и сколько времени вам нужно будет написать?
(еще раз, я пытаюсь получить "общую картину", чтобы понять, что здесь работает)