Офисный коммуникатор: как идентифицировать открытие окна чата - PullRequest
1 голос
/ 12 ноября 2010

Я разрабатываю надстройку «автоматическое сообщение» для Office Communicator 2007, но мне нужно знать, как определить, открывает ли окно чата другой пользователь (не я, а другой пользователь).

У меня есть следующее событие:

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

Есть ли способ?Спасибо!

1 Ответ

2 голосов
/ 15 ноября 2010

к сожалению, API-интерфейс Communicator не поддерживает это напрямую.Единственный обходной путь, который я нашел, включает в себя перехват события OnIMWindowContactAdded.

Для разговора, начатого вами, следующие события запускаются в следующем порядке:

  • OnIMWindowCreated
  • OnIMWindowContactAdded (для себя)
  • OnIMWindowContactAdded (для другого участника)

Для разговора, начатого другим участником, следующие события запускаются в этом порядке:

  • OnIMWindowCreated
  • OnIMWindowContactAdded (для другого участника)

Поэтому, когда участник начинает разговор, вы не видитеВы добавили себя в качестве контакта.

Вы можете использовать это следующим образом

  • При перехвате OnIMWindowCreated сохранить дескриптор окна (pIMWindow.HWND) в словаре (чтобы вы могли обрабатыватьнесколько окон разговора)
  • При перехвате OnIMWindowContactAdded найдите дескриптор в словаре.Если это первое добавленное событие, которое вы видели для окна, правило таково: если контакт - это вы (IsSelf), то вы начали разговор.В противном случае, другой контакт начал разговор.

Это не самое удовлетворительное решение (оно никогда не бывает, когда вы работаете с Automation API; o)), но оно должно вас туда доставить.

...