Офисный коммуникатор: как определить открытие окна IM
-
09-10-2019 - |
Вопрос
Я разрабатываю «автоматическое сообщение» в дополнение к Office Communicator 2007, но мне нужно знать, как идентифицировать, если другой пользователь открывает окно IM (не я, но другой пользователь).
У меня есть следующее событие:
private void communicator_OnIMWindowCreated(object pIMWindow)
{
if ((chk_Enabled.Checked))
{
IMessengerConversationWndAdvanced imWindow = pIMWindow as IMessengerConversationWndAdvanced;
imWindow.SendText(TxtAutoMessage.Text);
}
}
Есть ли путь? Спасибо!
Решение
К сожалению, API автоматизации коммуникатора не поддерживает это напрямую. Единственный обходной путь, который я нашел, включает в себя ловушку OnIMWindowContactAdded
мероприятие.
Для разговора, созданного вами, следующие события огонь в этом порядке:
OnIMWindowCreated
OnIMWindowContactAdded
(для себя)OnIMWindowContactAdded
(для другого участника)
Для разговора, созданного другим участником, следующие события пожара в этом порядке:
OnIMWindowCreated
OnIMWindowContactAdded
(для другого участника)
Поэтому, когда участник инициирует разговор, вы не видите, что себя добавлено как контакт.
Вы можете использовать это следующим образом
- На ловушку
OnIMWindowCreated
, Храните ручку окна (pIMWindow.HWND
) в словаре (так что вы можете обрабатывать несколько разговоров Windows) - На ловушку
OnIMWindowContactAdded
, ищите ручку в словаре. Если это первое добавленное событие, которое вы видели для окна, правило: если контакт вы (IsSelf
), тогда вы начали разговор. В противном случае еще один контакт начал разговор.
Это не самое удовлетворительное решение (они никогда не работают, когда вы работаете с API автоматизации; O)), но это должно вас туда добраться.