MyGroups 未在 Communicator.UIAutomation 中实现

2024-01-22

我正在开发一个浏览器外的 Silverlight 应用程序,它提供了一些 MS Office Communicator 2007 控件。我正在使用。与 SDK 一起安装的文档指出,IMessenger2 界面中有一个 MyGroups 属性,它将返回用户定义的组,但是当我尝试使用它时,我得到一个NotImplementedException。这是我正在使用的代码:

dynamic communicator = AutomationFactory.CreateObject("Communicator.UIAutomation");
communicator.AutoSignin();
foreach (dynamic g in communicator.MyGroups)
{
    //Do something with the group
}

如果我用 MyContacts 替换 MyGroups,我就可以很好地获取联系人列表。我是否需要执行其他操作才能访问 IMessenger2 界面中的属性?我在网上看到一些消息称 MyGroups 已在 Windows Messenger 中被弃用,但从文档来看,它似乎应该可用于 MS Office Communicator。

如果我无法使用 MyGroups,是否有其他方法来获取用户创建的组?


这里的问题是 MyGroups 属性被标记为 NotScriptable,这意味着您无法以您正在执行的方式(即使用 AutomationFactory)调用它。出于安全原因,自动化 API 中的某些属性和方法不可编写脚本 - 这是为了避免恶意页面在您不知情的情况下自动执行 Communicator 并执行某些任务。

看起来 Silverlight 中的 COM 互操作的处理方式与例如相同。从 VBScript 创建和调用 API,因此您将无法访问任何不可编写脚本的属性和方法。请参阅参考 http://msdn.microsoft.com/en-us/library/bb758755%28office.12%29.aspx了解哪些属性和方法不可编写脚本的详细信息。

我猜这会严重阻碍您的应用程序。我认为对您造成伤害的是选择 Silverlight OOB 的决定。有没有什么方法可以使用 WPF(甚至 winforms)而不是 Silverlight?如果您这样做,您可以直接引用 API,并拥有对所有属性/方法的完全访问权限。

不然我也想不出太多的选择。你无法捕获OnContactAddedToGroup事件,因为它不可订阅。

It might可以用 .NET 程序集包装 API,并通过 COM 公开它,然后以相同的方式实例化它 - 但在这种情况下,“不可编写脚本”可能仍然受到尊重,因此它不会为您购买任何东西。不尝试就很难说,但这仍然是一个相当糟糕的解决方案。

Edit:我刚刚尝试了包装器方法(需要为客户做类似的概念验证),它似乎有效。我就是这样做的:

创建一个新的.NET 类库。定义COM接口:

[ComVisible(true)]
[Guid("8999F93E-52F6-4E29-BA64-0ADC22A1FB11")]
public interface IComm
{
    string GetMyGroups();
}

定义一个实现该接口的类(您需要从 SDK 引用 CommunicatorAPI.dll):

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[GuidAttribute("C5C5A1A8-9BFB-4CE5-B42C-4E6688F6840B")]
[ProgId("Test.Comm.1")]
public class Comm : IComm
{
    public string GetMyGroups()
    {
        var comm = new CommunicatorAPI.MessengerClass();

        var groups = comm.MyGroups as IMessengerGroups;
        return string.Join(", ", groups.OfType<IMessengerGroup>().Select(g => g.Name).ToArray());
    }
}

构建并注册使用RegAsm http://msdn.microsoft.com/en-us/library/tzat5yw6%28VS.71%29.aspx。然后从 OOB silverlight 应用程序调用:

dynamic communicator = AutomationFactory.CreateObject("Test.Comm.1");
MessageBox.Show(communicator.GetMyGroups());

请注意,使用 Lync API 也可以使用相同的技术:

public string GetMyGroups()
{
    var comm = LyncClient.GetClient();
    return string.Join(", ", comm.ContactManager.Groups.Select(g => g.Name).ToArray());
}

虽然这有效,但我真的不能说这是否是一个好的做法,因为它正在解决安全限制,而安全限制可能是有充分理由的。我猜想最糟糕的情况是恶意网页可能会使用该组件(如果它知道控件的 ProgId)。

编辑:另外,使用这种方法你需要小心内存泄漏,例如确保在使用完 COM 对象后释放它们 - 很容易做到,只需要一点纪律;o)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyGroups 未在 Communicator.UIAutomation 中实现 的相关文章

  • 是否可以仅突出显示图像的某些部分(不透明度)?

    我已对图像应用了不透明度 这是代码
  • Silverlight 4 PLINQ

    我有一个非常简单的问题 是否可以将 PLINQ 与 Silverlight 4 一起使用 因为它似乎不存在于最常引用的程序集中 它不受支持 但您可以在这里投票 http dotnet uservoice com forums 4325 si
  • 传统DLL与COM DLL的区别

    我目前正在学习COM 我发现 COM DLL 是建立在传统 DLL 基础结构之上的 当我们构建COM DLL时 我们仍然依赖传统的DLL导出方法来引导我们到达内部的COM共同类 如果COM是为了在二进制级别重用组件 我认为传统的DLL也可以
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 远程服务器返回错误:NotFound。银光+WCF

    我正在尝试调用网络服务几个小时 我添加了 clientaccesspolicy xml
  • 属性和依赖属性有什么区别

    依赖属性的创建方式与属性相同 依赖属性是否仅在创建自定义控件时使用 依赖属性和标准属性有很大不同 依赖属性提供的关键功能是支持binding and 动画片 如果您想使用Binding或模板绑定该属性需要是依赖属性 当对属性进行动画处理时
  • 如何在Silverlight中捕获部分屏幕

    我想从应用程序内截取正在运行的 silverlight 3 应用程序的屏幕截图 然后我想将其作为缩略图呈现给用户 例如在图像控件中 我在做梦吗 对于一个简单的页面
  • 如何更改 Visual Studio 的默认 Web 浏览器?

    这是针对未锚定到 aspx 文件的 Silverlight 项目的 因此右键单击等有点不可能 有任何想法吗 Edit 添加 html 文件 然后单击它 真是蠢啊 上次我问问题是凌晨三点 为什么右键单击不可行 至少对于任何 HTML 文档 即
  • 如何在Silverlight应用程序中显示HTML?

    我需要在我的 Silverlight 应用程序中显示一些基本的 HTML 只是一些段落 无序列表和超链接 我该怎么办呢 使用哪个控件 对于初学者来说 请尝试此链接 http www wintellect com CS blogs jpros
  • Silverlight:加密Web服务的用户名和密码

    加密不是我的强项 我正在 Silverlight 3 中编写一个应用程序 它与 Web 服务通信以对用户进行身份验证 Web 服务不一定在 SSL 下托管 我正在尝试找到一种在传递用户名和密码之前对其进行可逆加密的方法 该方法不依赖于将密钥
  • Silverlight/WPF 按钮上的 MouseOver 样式

    努力为鼠标悬停的按钮设置样式 我已经成功地设置了按钮的样式 纯红色 但我希望每当鼠标悬停时它都会更改为纯黑色 我是 XAML 新手 我可以看到它需要某种类型的故事板 动画 不确定具体如何执行此操作 任何帮助将不胜感激 这与 WPF 和 Si
  • VBA 中 .NET 的 System.Convert 的替代方案

    我正在 Microsoft Access 中编写一个 VBA 函数 以使用 RSA 密钥加密 解密文本数据 目前正在进行以下工作 CreateObject System Security Cryptography RSACryptoServ
  • 使用 VS2012 中的 C++ 中的 ATL 创建 COM

    尝试在 Visual Studio 2012 中使用 ATL 创建简单的 COM 库 我愿意 New ATL Project Welcome to the ATL Project Wizard Next Application Settin
  • 我们如何在 python 中使用 ms office communicator 客户端公开的 API,这可能吗?

    我想使用 ms office communicator 客户端 api 并且我想在 python 中使用这些 API 可以吗 gt gt gt import win32com client gt gt gt msg win32com cli
  • Silverlight UserControl 自定义属性绑定

    在 Silverlight 用户控件中实现自定义属性的正确方法是什么 从技术上讲 Silverlight 中的每个 页面 都是一个 UserControl 它们派生自 UserControl 类 当我在这里说 UserControl 时 我
  • 从 C# 访问 COM vtable

    C 中有没有办法访问 COM 对象的虚拟方法表以获取函数的地址 经过大量搜索和拼凑不同的部分解决方案后 我弄清楚了如何做到这一点 首先 您需要为您尝试访问的对象定义 COM 组件类 ComImport Guid InterfaceType
  • 如何在不监听框架控件中定义的任何鼠标事件的情况下检测鼠标单击?

    是否可以在不侦听框架控件中定义的任何鼠标事件的情况下检测鼠标单击 我的意思是 我不想编写如下代码 control MouseLeftButtonDown this HandleMouseLeftButtonDown 但我想知道用户是否点击屏
  • 为什么我的 COM 对象不显示组件服务中的方法?

    我正在尝试创建一个 COM 对象并将其注册到 COM 下 一切似乎都很顺利 但是当我查看组件服务并深入了解时 控制台根目录 组件服务 电脑 我的电脑 COM 应用程序 测试通讯 组件 TestCom Com MyCom 接口 MyCom 方
  • Pythoncom - 将相同的 COM 对象传递给多个线程

    你好 对于 COM 对象 我是一个完全的初学者 非常感谢任何帮助 我正在开发一个Python程序 该程序应该以客户端 服务器的方式读取传入的MS Word文档 即客户端发送一个请求 一个或多个MS Word文档 服务器使用pythoncom
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象

随机推荐

  • Laravel 中的参数错误

    我面临着Invalid parameter number parameter was not defined 是因为这个吗 and orders hour begin gt begin hour and orders hour final
  • 将提供程序注入另一个提供程序

    假设我们有一个名为Comp和两个 Injectable提供者称为P1 and P2 P1需要一个实例P2 P1被注入Comp 如果我声明两个提供商都在 它就可以正常工作Comp像这样 Component providers P1 P2 ex
  • 如何清除 StyledDocument 中的所有样式?

    样式文档 http docs oracle com javase 7 docs api javax swing text StyledDocument html包含各种设置样式的方法 喜欢设置角色属性 http docs oracle co
  • pygame 中有像海龟一样的 .stamp() 方法吗?

    我正在开发一个简单的 pygame 项目 在其中您可以通过按空格来克隆自己 我在 Turtle 中使用以下命令创建了这个项目Turtle stamp 但我不确定pygame中是否存在这样的东西 简短回答 不 没有一个 长答案 但是 您可以轻
  • 如何在 Swift 中加载 UIWebView 中的 URL?

    我有以下代码 UIWebView loadRequest NSURLRequest URL NSURL string google ca 我收到以下错误 NSURLRequest 无法转换为 UIWebView 知道问题是什么吗 加载请求
  • Angular2 - “无法绑定到‘ngSwitchWhen’,因为它不是‘模板’的已知属性。”

    我收到以下错误 无法绑定到 ngSwitchWhen 因为它不是 模板 的已知属性 我读过不同的主题 建议添加 从 angular common 导入 CommonModule 并将 CommonModule 添加到 NgModel的导入部
  • Xcode 8 beta 6 - 架构的冲突值

    我尝试使用 Xcode beta 6 在设备上安装我的应用程序 但它在链接阶段失败并出现以下错误 ld linking module flags Objective C Class Properties IDs have conflicti
  • 应用两个数据框

    我正在使用 R 并且我有两个 data frames A and B 它们都有 6 行 但是A有 25000 个列 基因 并且B有 30 列 我想应用一个带有两个参数的函数f x y where x是每一列A and y是每一列B 到目前为
  • C# 将列表拆分为 n 组的所有组合 - 来自 Python 的代码迁移

    我所追求的算法有一个很好的实现here https stackoverflow com questions 39192777 python split a list into n groups in all possible combina
  • 扩展 Laravel 核心日志记录

    我回来时遇到了更多 Laravel 问题 因为我在理解事物方面遇到了问题 再次 我尝试创建一个包来进行我自己的日志记录 在进行了一些额外的阅读 浏览核心代码并尝试其他方法之后 我得出的结论是 我需要做的就是扩展 laravel 日志记录的核
  • 加载内容后显示引导模式

    我正在使用 Bootstrap 3 模式 其中我从 getJson 函数加载一些数据 由于模式内的数据加载速度不一样快 我想显示加载图像 文本 加载所有数据后 然后显示 打开模式 我找到了这个Thread https stackoverfl
  • Html显示格式化文本

    我必须在 html 页面上显示一堆文本 文本看起来像这样 001 This is a Line 00 12 04 002 003 Everthing looks good so far 文本是 预先格式化的 包含大量空格和破折号 每行都具有
  • JQuery 到 asmx 在 Windows 2008 R2 SP1 上失败

    自从安装 SP1 以来 我们在从 JQuery 客户端代码调用 asmx 页面时遇到了问题 IIS 将 JQuery post 调用指向他的默认 404 页面 我们对环境进行了角色恢复 断言此问题是由 SP1 引起的 并且测试证实了这一点
  • mongodb-java POJO不返回id

    我是 MongoDB 的新手 在这里有点疯狂 我正在使用最新的 mongo java driver 版本和 dropwizard 我使用 POJO 写入 DDBB 它有效 但是 当尝试获取元素时 我没有得到实际的 id 这是我尝试过的 DD
  • 如何在数字的最后三位数字之前插入小数点?

    我有一个数字 需要添加小数以进行格式化 该数字保证在 1000 到 999999 之间 我已经以其他方式介绍了其他可能性 这是我无法理解的 我需要在最后 3 位数字之前添加小数 例如 1000 gt 1 000 23513 gt 23 51
  • 我可以向 HTML 标记添加自定义属性吗?

    我可以向 HTML 标记添加自定义属性吗 如下所示
  • 在 Google App Engine 中创建表单自动完成

    我想为标签字段构建一个自动完成功能 就像 App Engine 上的 SO 一样 知道我应该如何进行这个过程吗 服务器端算法 自动完成应该有什么逻辑 应用程序引擎实施 数据存储架构应该是什么 嘿 几天前我就遇到了这个问题 只要您有想要搜索的
  • 如何在 ASP.Net Core Razor 页面中返回带有模型的页面

    如何重定向到页面并传递其模型 就像我们在 MVC 中所做的那样return View model MyModel 我尝试过的 return RedirectToPage Notify new Model notifierVM 注意 我要返回
  • 如何立即关闭 C 程序?

    我正在编写 C 代码 在其中分析一些数据 我已将程序设置为仅处理 100 个数据输入 当输入超过 100 个时 就会出现分段错误 我想创建一种方法 以便当输入数量超过 100 时 用户将收到警告并且程序将终止 我知道如何从主要功能中简单地做
  • MyGroups 未在 Communicator.UIAutomation 中实现

    我正在开发一个浏览器外的 Silverlight 应用程序 它提供了一些 MS Office Communicator 2007 控件 我正在使用 与 SDK 一起安装的文档指出 IMessenger2 界面中有一个 MyGroups 属性