Обнаружение звонка в офисный коммуникатор - PullRequest
1 голос
/ 20 апреля 2011

То, что я пытаюсь сделать, - это функция, которая советует пользователям, которые делают аудиовызовы в офисном коммуникаторе по беспроводному соединению, вместо этого использовать проводное соединение.

Я осматривался, но не смог найти информацию, которую искал для

Я ищу способ определить, находится ли Office Communicator в режиме аудиовызова.Есть простой способ сделать это?

1 Ответ

2 голосов
/ 20 апреля 2011

Не думаю, что вы сможете получить именно то, что вам нужно, с помощью Communicator, но вы можете подойти ближе.(возможно, вы могли бы стать еще ближе или даже ближе, если бы вам пришлось перейти на Lync).

Вам нужно будет использовать API автоматизации - документация здесь , загрузка здесь .

Первое, что нужно попробовать, это отловить изменения статуса пользователя:

MessengerClass _communicator;

public Form1()
{
    InitializeComponent();
    _communicator = new MessengerClass();
    _communicator.OnMyStatusChange += new DMessengerEvents_OnMyStatusChangeEventHandler(_communicator_OnMyStatusChange);
}

void _communicator_OnMyStatusChange(int hr, MISTATUS mMyStatus)
{
    AddText(string.Format("My Status changed to '{0}'", mMyStatus));
}

Вам нужен статус MISTATUS_ON_THE_PHONE

Недостатком этого является то, что некоторые статусы будут переопределять статус MISTATUS_ON_THE_PHONE.например, если пользователь установлен на «Онлайн», а затем совершает или принимает вызов, статус изменится на MISTATUS_ON_THE_PHONE.Но если их статус установлен на «Не беспокоить», и они делают или принимают вызов, статус НЕ изменится на MISTATUS_ON_THE_PHONE.

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

_communicator = new MessengerClass();
_communicator.OnIMWindowCreated += new DMessengerEvents_OnIMWindowCreatedEventHandler(_communicator_OnIMWindowCreated);

Проблема в том, что это сработает для IM и AV-разговоров, а также для входящих и исходящих разговоров.Невозможно напрямую определить, является ли вызов исходящим звуковым вызовом.

Вы также можете перехватить событие «Добавлен контакт», это даст вам некоторую информацию о том, какие получатели добавляются в разговор, и когда,Вполне возможно, что порядок, в котором это происходит, даст вам некоторую информацию относительно того, является ли он исходящим или входящим, и вы могли бы искать добавление «tel:» uri, чтобы сказать вам, является ли звонок на телефон (хотя это не будетпомощь от коммуникатора к вызовам коммуникатора)

_communicator.OnIMWindowContactAdded += new DMessengerEvents_OnIMWindowContactAddedEventHandler(_communicator_OnIMWindowContactAdded);

Лучше всего поиграть с событиями и посмотреть, что происходит при каких обстоятельствах.Этот код должен заставить вас работать с этим.

MessengerClass _communicator;

public Form1()
{
    InitializeComponent();
    _communicator = new MessengerClass();
    _communicator.OnIMWindowCreated += new DMessengerEvents_OnIMWindowCreatedEventHandler(_communicator_OnIMWindowCreated);
    _communicator.OnIMWindowDestroyed += new DMessengerEvents_OnIMWindowDestroyedEventHandler(_communicator_OnIMWindowDestroyed);
    _communicator.OnIMWindowContactAdded += new DMessengerEvents_OnIMWindowContactAddedEventHandler(_communicator_OnIMWindowContactAdded);
    _communicator.OnIMWindowContactRemoved += new DMessengerEvents_OnIMWindowContactRemovedEventHandler(_communicator_OnIMWindowContactRemoved);
    _communicator.OnMyStatusChange += new DMessengerEvents_OnMyStatusChangeEventHandler(_communicator_OnMyStatusChange);
}

void _communicator_OnMyStatusChange(int hr, MISTATUS mMyStatus)
{
    AddText(string.Format("My Status changed to '{0}'", mMyStatus));
}

void _communicator_OnIMWindowContactRemoved(object pContact, object pIMWindow)
{
    AddText(string.Format("{0}   - Participant removed - '{1}'", ((IMessengerConversationWndAdvanced)pIMWindow).HWND, ((IMessengerContactAdvanced)pContact).SigninName));
}

void _communicator_OnIMWindowContactAdded(object pContact, object pIMWindow)
{
    AddText(string.Format("{0}   - Participant added - '{1}'", ((IMessengerConversationWndAdvanced)pIMWindow).HWND, ((IMessengerContactAdvanced)pContact).SigninName));
}

void _communicator_OnIMWindowDestroyed(object pIMWindow)
{
    AddText(string.Format("{0} Conversation Closed, duration = {1}", ((IMessengerConversationWndAdvanced)pIMWindow).HWND, (DateTime.Now - _start).ToString()));
}

void _communicator_OnIMWindowCreated(object pIMWindow)
{
    try
    {
        AddText(string.Format("{0} Conversation Created", ((IMessengerConversationWndAdvanced)pIMWindow).HWND));
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

private delegate void AddTextDelegate(string text);

private void AddText(string text)
{
    if (textBox1.InvokeRequired)
    {
        textBox1.Invoke(new AddTextDelegate(AddText), text);
        return;
    }
    textBox1.Text += text + "\r\n";
}

Кстати, не забудьте принять это как ответ, используя "галочку", если вы чувствуете, что это помогло:)

...