(всеми означает сделать повторную бирку с соответствующей технологией: Я не знаю, какие они есть :)Windows: как получить список всех видимых окон?
Я, возможно, позже более подробные вопросы, о конкретных деталях, но сейчас я «Я пытаюсь понять« большую картину »: я ищу способ перечислить« реальные видимые окна »в Windows. Под «реальным видимым окном» я имею в виду именно то, что пользователь назовет «окном». Мне нужен способ получить список всех этих видимых окон в Z-порядке.
Отметьте, что I 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 искусства, для которого вы можете upvote это): сейчас я смотрю на большая картина". Я хочу знать, что такое происходит под Windows.
Бонус вопрос: представьте, что вы должны были бы написать маленькую .exe написание названия окна/положение/размер во временный файл каждый раз есть изменения окна на экране, как долго такая программа будет примерно в вашем язык выбора и сколько времени вам нужно будет написать?
(опять же, я пытаюсь получить «большую картину», чтобы понять, что на работе здесь)
Никто? Уже +1 upvote и 1 любимый ... :) – NoozNooz42
Ну, я думаю, вы начнете с FindWindowEx, чтобы перечислять все окна в Z-порядке, а затем использовать GetWindowLong, чтобы получить стиль окна. Очевидно, что вы будете рассматривать только окна с WS_VISIBLE и, возможно, WS_CAPTION или что-то в этом роде. – Luke
Есть .net framework вариант? У меня есть простое решение для этого, занимает десять секунд. – Cyclone