Outlook 联系人不显示自定义上下文菜单命令

问题描述 投票:0回答:1

我正在努力解决一个问题,我真的希望你能提供帮助。

我上次开发软件是在大约 20 年前,主要从事结构化 BASIC 工作,在过去几年中使用 VBScript 进行过一些小工作,所以我担心我对现代语言/工具有点不熟悉,但我'我正在努力追赶。

我想为 Microsoft Outlook 2016 开发一个简单的免费插件(在本地运行,而不是网络托管),允许右键单击联系人项目,选择联系人的电话号码,并让 Outlook 进行 URI/URL 呼叫发送至 CALLTO: 和/或 TEL: 提供商/应用程序并提供相关电话号码以发起呼叫。此功能开箱即用,仅适用于 Lync、Skype for Business 和 Teams。我正在尝试开发的插件会将其扩展到任何支持 TEL: 或 CALLTO: URI/URL 的 VOIP/软电话客户端。

我的第一步只是显示上下文菜单,但我担心我会失败。

我在 Github Copilot 的帮助下使用 VB 在 Visual Studio 中开发了以下代码,它可以编译并且我可以将加载项加载到 Outlook 中,但当我右键单击联系人时它永远不会出现。


Imports Microsoft.Office.Tools.Outlook
Imports Outlook = Microsoft.Office.Interop.Outlook

Public Class ThisAddIn
    Private Sub ThisAddIn_Startup() Handles Me.Startup
        AddHandler Application.ItemContextMenuDisplay, AddressOf Application_ItemContextMenuDisplay
    End Sub

    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
        RemoveHandler Application.ItemContextMenuDisplay, AddressOf Application_ItemContextMenuDisplay
    End Sub

    Private Sub Application_ItemContextMenuDisplay(ByVal CommandBar As Office.CommandBar, ByVal Selection As Object)
        MsgBox("Application_ItemContextMenuDisplay")
        If TypeOf Selection Is Outlook.ContactItem Then
            Dim callItem As Office.CommandBarControl = CommandBar.Controls.Add(Office.MsoControlType.msoControlButton)
            callItem.Caption = "URI Call"
            callItem.Tag = "URI Call"
            AddHandler CType(callItem, Office.CommandBarButton).Click, AddressOf callItem_Click
        End If
    End Sub

    Private Sub callItem_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean)
        Dim contact As Outlook.ContactItem = CType(Application.ActiveExplorer.Selection.Item(1), Outlook.ContactItem)
        Dim phoneNumbers As String = ""
        For Each phoneNumber As Object In contact.PhoneNumbers
            If TypeOf phoneNumber Is Outlook.PropertyAccessor Then
                Dim pa As Outlook.PropertyAccessor = phoneNumber.PropertyAccessor
                phoneNumbers = phoneNumbers & pa.GetProperty("http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/TelephoneNumber") & Environment.NewLine
            End If
        Next
        MsgBox(phoneNumbers)
    End Sub
End Class


此加载项在 Outlook 中显示为已加载。

按照现在的代码,当我右键单击联系人时,至少应该得到一个消息框。 (我添加了 MsgBox("Application_ItemContextMenuDisplay") 行只是为了调试并查看是否可以让它显示,但它没有。

理想情况下,如果一切正常(并且我删除了调试消息框),那么当我右键单击时,我应该看到联系人电话号码的列表。一旦我开始工作,我将尝试让 URI 调用 Callto: 工作。

知道为什么这不起作用吗?如果我遗漏了一些明显的东西,我提前道歉,我对此还太陌生😬,我希望 Github 副驾驶不会让我用这种方法找错树...

outlook vsto outlook-addin office-addins ribbonx
1个回答
0
投票

Command bars
已在 MS Office 2010 中弃用,保留用于兼容性目的,但不用于自定义 UI。

Fluent UI(又名 Ribbon UI)应该用于自定义 Office 应用程序中的上下文菜单。请阅读以下文章了解更多相关信息:

© www.soinside.com 2019 - 2024. All rights reserved.