Об'єкт SHDocVw :: ShellWindows
Починаючи з версії 4.71, оболонка містить об'єкт ShellWindows, який надає доступ до колекції вже запущених екземплярів Internet Explorer'a. Призначення методів цього інтерфейсу цілком прозоро. Властивість Count повертає число елементів в колекції. Метод Item дозволяє отримати покажчик на інтерфейс IWebBrowser2 відповідного вікна.
Насправді колекція ShellWindows містить відкриті вікна не тільки Internet Explorer'a, але і Windows Explorer'a. Незважаючи на це, до примірників обох типів можна успішно звертатися через покажчик на IWebBrowser2. Відрізнити Internet Explorer можна, наприклад, за наявності об'єкта document.
Таким чином, скориставшись цією колекцією можна не тільки дізнатися, скільки і яких вікон Explorer'а відкрито, але і отримати практично повний контроль над ними. Дійсно, маючи покажчик на IWebBrowser2, ми вільні робити з об'єктами Explorer'a все що заманеться. Наступний приклад просто закриє їх. Ні, постійте, наступний приклад закриє всі вікна Windows Explorer'a, а у всіх вікнах Internet Explorer'a змінить колір фону на синій.
події DShellWindowsEvents
Крім цього, об'єкт ShellWindows підтримує подієвий інтерфейс DShellWindowsEvents, підключившись до якого можна своєчасно отримувати повідомлення про всі зміни в житті вікон Explorer'а. Цей інтерфейс містить всього два методи WindowRegistered і WindowRevoked, які викликаються оболонкою відповідно при створенні і закритті чергового вікна експлорера. Питання підключення до подій досить докладно розглянуті в різних джерелах (в тому числі і на нашому сайті), тому не будемо зупинятися на них окремо. Приклад реалізації схожого прикладу з підтримкою подій DShellWindowsEvents можна знайти тут.