1

我正在为 Office Communicator 2007 开发一个“自动消息”加载项,但我需要知道如何识别其他用户是否打开了 IM 窗口(不是我,而是其他用户)。

我有以下事件:

private void communicator_OnIMWindowCreated(object pIMWindow)
{                     
    if ((chk_Enabled.Checked))
    {                
        IMessengerConversationWndAdvanced imWindow = pIMWindow as IMessengerConversationWndAdvanced;
        imWindow.SendText(TxtAutoMessage.Text);
    }
}

有办法吗?谢谢!

4

1 回答 1

2

不幸的是,Communicator Automation API 不直接支持这一点。我发现的唯一解决方法是捕获OnIMWindowContactAdded事件。

对于您发起的对话,以下事件按此顺序触发:

  • OnIMWindowCreated
  • OnIMWindowContactAdded(为自己)
  • OnIMWindowContactAdded(对于其他参与者)

对于另一个参与者发起的对话,以下事件按此顺序触发:

  • OnIMWindowCreated
  • OnIMWindowContactAdded(对于其他参与者)

因此,当参与者发起对话时,您不会看到自己被添加为联系人。

您可以按如下方式使用它

  • 在陷印OnIMWindowCreated时,将窗口句柄 ( pIMWindow.HWND) 存储在字典中(这样您就可以处理多个对话窗口)
  • 在陷印OnIMWindowContactAdded时,在字典中查找句柄。如果这是您在窗口中看到的第一个已添加事件,则规则是:如果联系人是您 ( IsSelf),则您开始了对话。否则,另一个联系人开始了对话。

这不是最令人满意的解决方案(当您使用自动化 API 时,它们永远不会是;o)),但它应该能让您到达那里。

于 2010-11-15T16:18:57.437 回答