原帖:
启动Outlook时,加载加载项并添加一个带有一些按钮的工具栏。
toolBar = OutlookApp.ActiveExplorer().CommandBars.Add(MENU_TAG, MsoBarPosition.msoBarTop, false, true);
一切正常,但现在有一位用户将其Outlook快捷方式设置为启动Outlook最小化。
然后OutlookApp.ActiveExplorer()返回null。 当有ActiveExplorer然后添加命令栏时,是否有一些事件可以用来捕获?
OutlookApp.Explorers.NewExplorer不起作用。
此外,当我在添加CommandBar之前显示消息框时:一切正常,即使Outlook已最小化...为什么?
修改
正如有人在答案中所说,直接访问探索者的工作是有效的。所以这解决了最小化前景的问题......但是......
其中一个用户没有将Outlook运行最小化,并且仍然在任何gui可用之前加载插件。探险家系列中甚至没有一个探险家:(这怎么可能?
编辑2:
我尝试使用 76mel 建议的计时器,每隔100ms检查一次ActiveExplorer为空。这会按预期添加按钮,但我可以设置按钮的图片属性。
我得到了这个例外:
灾难性失败(HRESULT异常:0x8000FFFF(E_UNEXPECTED))
答案 0 :(得分:2)
如果没有UI =没有资源管理器:(
尝试等待,直到Explorers.NewExplorer事件触发才能获得CommandBars对象。
更新: 是的它看起来像一个计时器会做的哎呀有点hacky。 因此,当您有一个null ActiveExplorer时,连接一个计时器并检查ActiveExplorer onTick。一旦用户弹出Outlook,您将获得活动的资源管理器,然后您可以添加工具栏。
答案 1 :(得分:2)
我不熟悉托管插件,但我找到了这个答案。 如果没有ActiveExplorer,请尝试直接访问Explorers集合,例如在Explorers [1]中。
我在ECE中遇到了同样的问题并通过等待用户在Outlook中更改文件夹时调用的OnObjectChange回调来解决它,然后我尝试重新创建工具栏。这可能大致对应于Outlook对象模型中的FolderSwitch事件。
只是我的2c。