【问题标题】:COM-Object for Teams Client - Microsoft.Office.Uc团队客户端的 COM 对象 - Microsoft.Office.Uc
【发布时间】:2021-02-26 00:31:08
【问题描述】:

我正在尝试访问 Microsoft Teams 客户端 COM 对象
就像 Skype For Business 和 PowerShell 中的 Lync 客户端对象一样。

this完全相反。

[Reflection.Assembly]::LoadFile("C:\temp\Microsoft.Lync.Model.dll")
[Reflection.Assembly]::LoadFile("C:\temp\microsoft.office.uc.dll")
$lyncclient = [Microsoft.Lync.Model.LyncClient]::GetClient()
$lyncclient2 = [Microsoft.Lync.Model.ContactInformationType]::Availability
$lyncclient.Self.Contact.GetContactInformation($lyncclient2);

此代码导致当前 Lync/Skype 用户存在。

$teamsClient = [Microsoft.Office.Uc.IUCOfficeIntegration]
$teamsClient.GetInterfaces()

以下小文https://www.msxfaq.de/teams/api/teams_presence.htm 我什至无法在 Get-ChildItem HKLM 中收到 Com obj 列表 仅在 Get-ChildItem HKCU 中。

我的目标是使用与 Outlook 相同的功能来读取 MS Teams 中的用户状态。

【问题讨论】:

    标签: com microsoft-teams skype-for-business


    【解决方案1】:

    Teams 仍在通过 COM 公开一些功能。它实现了 IUCOfficeIntegration 接口,因此 Microsoft Outlook 可以在 Outlook 本身中显示联系人的 Teams 可用性状态。

    可以在此处找到有关 Office 集成如何工作的更多信息。

    https://github.com/MicrosoftDocs/office-developer-client-docs/blob/master/docs/shared/integrating-im-applications-with-office.md

    我只是快速描述了我为通过 COM 接收可用性信息所做的工作。 请注意,这是 C# 代码。我希望它仍然有帮助。

    获取 Teams COM 类的 ClassID

    安装 Outlook 和 Teams 后,Teams 会将自己注册为能够向 Outlook 提供可用性信息的 IM 应用程序。这是通过编写几个注册表节点来完成的。 ClassID 可以在这里找到 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\IM Providers\Teams

    获取可用性:

    为此,我基本上颠倒了链接文章中显示如何为 Office 集成实现客户端的所有步骤,因为我想使用 Teams 客户端。 请注意,需要安装 Lync SDK (https://www.microsoft.com/en-us/download/details.aspx?id=36824),因为其中定义了所有 Office 集成接口。 (需要参考 Microsoft.Office.Uc.dll)。也许这个库可以

    class Program
    {
    
      static void Main()
      {
        var version = "15.0.0.0";
        var teams = (IUCOfficeIntegration) new TeamsOfficeIntegration();
    
        var client = (IClient) teams.GetInterface(version, OIInterface.oiInterfaceILyncClient);
    
        var contactManager = client.ContactManager;
    
        var uri = "name@company.com";
        var contact = contactManager.GetContactByUri(uri);
        var availibility =
            (ContactAvailability) contact.GetContactInformation(ContactInformationType.ucPresenceAvailability);
      }
    
      [ComImport, Guid("00425F68-FFC1-445F-8EDF-EF78B84BA1C7")]
      public class TeamsOfficeIntegration
      {
      }
    }
    

    我会尝试上传一个小项目到 GitHub 来演示......

    由于 Powershell 基于 .NET,这也应该是可行的。或者可以编写一个小的 C# 互操作库。

    【讨论】:

    • 您好,我遇到的问题是在注册表中找不到 IM 提供商。因此我的应用程序无法正常运行...我的计算机上安装了 MS Teams 和 Outlook。你知道问题出在哪里吗?
    • 我刚刚检查过,IM 提供者位于 HKEY_CURRENT_User 而不是 HKEY_LOCAL_MACHINE。这会导致问题吗?
    • 上面链接的office集成文档是这么说的。它应该位于此节点中。 HKEY_CURRENT_USER\软件\IM 提供者\。但是我不认为 Teams Guid 正在发生变化。所以它应该只适用于给定的。
    • 嗯,当我在“(IUCOfficeIntegration)new TeamsOfficeIntegration();”位置运行调试器时,我总是被告知 COM 对象未注册。
    【解决方案2】:

    Teams 根本不使用 COM,以后也不会。

    我们计划支持 Microsoft Graph bit 中的状态 API,但没有共享日期。

    【讨论】:

    • 不知何故,Outlook 2013 能够直接从团队客户端接收状态。哪个应该使用 IM api 作为 lync 客户端
    • 有 API 可以从 Microsoft Graph 检索用户的存在。可能只是 Outlook 通过 Microsoft Graph API 检索此信息。
    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多