我正在努力解决一个问题,我真的希望你能提供帮助。
我上次开发软件是在大约 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 副驾驶不会让我用这种方法找错树...
Command bars
已在 MS Office 2010 中弃用,保留用于兼容性目的,但不用于自定义 UI。
Fluent UI(又名 Ribbon UI)应该用于自定义 Office 应用程序中的上下文菜单。请阅读以下文章了解更多相关信息: