Невозможно создать CommandBar, когда Outlook запущен в свернутом виде (надстройка Outlook 2007)

Исходное сообщение:
При запуске Outlook загружается надстройка и добавляет панель инструментов с некоторыми кнопками.

toolBar = OutlookApp.ActiveExplorer().CommandBars.Add(MENU_TAG, MsoBarPosition.msoBarTop, false, true);

Все работало нормально, но теперь у одного пользователя ярлык Outlook настроен на запуск Outlook в свернутом виде.

А затем OutlookApp.ActiveExplorer() возвращает значение null. Есть ли какое-то событие, которое я могу использовать, чтобы поймать, когда есть ActiveExplorer, а затем добавить панель команд?

OutlookApp.Explorers.NewExplorer не работает.

Кроме того, когда я показываю окно сообщения перед добавлением CommandBar: все работает нормально, даже если Outlook свернут... Почему?

изменить:
Прямой доступ к свойству Explorers работал, как кто-то сказал в ответах. Так что это решает проблему минимизации перспективы... Но...

У одного из пользователей не свернут запуск Outlook, и все же плагин загружается до того, как станет доступен какой-либо графический интерфейс. В коллекции Исследователей нет даже 1 эксплорера :( Как это возможно?

изменить 2:
Я попытался использовать таймер, предложенный 76mel, проверяя ActiveExplorer на нуль каждые 100 мс. Это добавляет кнопки, как и ожидалось, но я могу установить свойство Picture кнопки.

Я получаю следующее исключение:
Катастрофический сбой (Исключение из HRESULT: 0x8000FFFF (E_UNEXPECTED))


person Ward Werbrouck    schedule 30.06.2009    source источник


Ответы (2)


Если нет UI = нет проводника :(

Попробуйте дождаться, пока сработает событие Explorers.NewExplorer, чтобы иметь возможность получить объект CommandBars.

Обновление: Да, похоже, что таймер поможет немного взломать. Поэтому подключите таймер, когда у вас есть нулевой ActiveExplorer, и проверьте ActiveExplorer onTick. Как только пользователь открывает Outlook, вы получаете активный проводник, а затем можете добавлять панели инструментов.

person 76mel    schedule 03.07.2009
comment
Не работает, так как это событие не запускается при открытии главного окна Outlook. Любые другие идеи? - person Ward Werbrouck; 06.07.2009
comment
Да извините, казалось бы, в 2007 он не горит. Может быть, таймер - это путь ... который начинается с проверки нулевого значения на тик и заканчивается, когда не является нулевым. У меня будет игра... - person 76mel; 06.07.2009
comment
При использовании таймера я не могу установить значки на свои кнопки. Я получаю это удивительное исключение: катастрофический сбой (исключение из HRESULT: 0x8000FFFF (E_UNEXPECTED)) - person Ward Werbrouck; 08.07.2009
comment
Да, я видел эту ошибку раньше... это может означать что угодно! но можете ли вы прислать мне свой код, показывающий, как вы устанавливаете свои значки, поскольку я хотел бы отлаживать их. - person 76mel; 08.07.2009
comment
Аррр. Вы используете класс таймера потока? если это так, это породит еще один поток ... и вам нужно играть в потоке пользовательского интерфейса. Я думаю, что класс таймера формы работает в основном потоке. - person 76mel; 08.07.2009
comment
Хорошо, я действительно использовал не тот таймер! Использование System.Windows.Forms.Timer работает отлично. Поэтому я согласен с вашим ответом, так как он не ожидает действий пользователя перед добавлением панели инструментов. Спасибо! - person Ward Werbrouck; 09.07.2009

Я не знаком с управляемыми надстройками, но нашел этот ответ. Если ActiveExplorer отсутствует, попробуйте получить доступ к коллекциям Explorers напрямую, как в Explorers[1].

У меня была такая же проблема в моем ECE, и я решил ее, дождавшись обратного вызова OnObjectChange, который будет вызываться, когда пользователь изменит папку в Outlook, а затем я попытаюсь воссоздать панель инструментов. Это может примерно соответствовать событию FolderSwitch в объектной модели Outlook.

Только мой 2с.

person Petr Prazak    schedule 07.07.2009
comment
Спасибо, это решило проблему в случае, о котором я говорил. Но теперь есть другая связанная проблема. Я также пробовал OnObjectChange раньше, но это немного неудобно, так как он загружает панель инструментов только тогда, когда пользователь щелкает что-то в Outlook. - person Ward Werbrouck; 08.07.2009
comment
Да, вы правы, но я думаю, что это лишь небольшая неприятность, и пользователи могут с этим смириться. По крайней мере, в моем плагине. Должно же быть какое-то событие, на которое мы могли бы отреагировать. Я не сторонник решений по таймеру. - person Petr Prazak; 08.07.2009
comment
Я согласен с вами, Петр, это очень хакерски, но OOM не очень удобен для разработчиков. Эта техника существует уже давно, начиная с прогноза 2000 дней.. - person 76mel; 08.07.2009
comment
Спасибо за ваш вклад, Птер, но я согласился с ответом 76mel. Перед добавлением панели инструментов не требуется никаких действий пользователя. Что, если первое, что захочет сделать пользователь, это воспользоваться еще не добавленной панелью инструментов? Выглядит не очень удобно... - person Ward Werbrouck; 09.07.2009