Правильный способ завершения собрания для всех участников Skype для бизнеса с помощью Lync SDK

Я пытаюсь реализовать функцию завершения текущего разговора для всех участников с помощью Microsoft Lync SDK для Skype для бизнеса. Работа должна быть выполнена так:

conversation.End();

Но закрывает только окно участника, начавшего встречу. Есть ли другой способ сделать это?


person Samuel Veizaga    schedule 03.10.2018    source источник


Ответы (1)


Метод «Завершить» просто выходит из конференции, как вы говорите.

Не существует документированного API для «Завершения собрания».

Если вы действительно хотите сделать это программно, вам нужно будет использовать что-то вроде Автоматизация Windows, чтобы выбрать кнопку "Дополнительные параметры", затем нажмите кнопку "Завершить собрание".

Вот пример метода использования автоматизации Windows для нажатия кнопки «Завершить собрание».

bool EndMeeting(ConversationWindow window)
{
    var conversationWindowElement = AutomationElement.FromHandle(window.InnerObject.Handle);
    if (conversationWindowElement == null)
    {
        return false;
    }

    AutomationElement moreOptionsMenuItem;
    if (GetAutomationElement(conversationWindowElement, out moreOptionsMenuItem, "More options", ControlType.MenuItem))
    {
        (moreOptionsMenuItem.GetCurrentPattern(ExpandCollapsePattern.Pattern) as ExpandCollapsePattern).Expand();
    }
    else if (GetAutomationElement(conversationWindowElement, out moreOptionsMenuItem, "More options", ControlType.Button))
    {
        // in the Office 365 version of lync client, the more options menu item is actually a button
        (moreOptionsMenuItem.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern).Invoke();
    }
    else
    {
        // didn't find it.
        return false;
    }

    AutomationElement menuOptionAction;
    if (!GetAutomationElement(moreOptionsMenuItem, out menuOptionAction, "End Meeting", ControlType.MenuItem))
    {
        return false;
    }

    (menuOptionAction.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern).Invoke();
    return true;
}

private static bool GetAutomationElement(AutomationElement rootElement, out AutomationElement resultElement, string name, ControlType expectedControlType)
{
    Condition propCondition = new PropertyCondition(AutomationElement.NameProperty, name, PropertyConditionFlags.IgnoreCase);
    resultElement = rootElement.FindFirst(TreeScope.Subtree, propCondition);
    if (resultElement == null)
    {
        return false;
    }

    var controlTypeId = resultElement.GetCurrentPropertyValue(AutomationElement.ControlTypeProperty) as ControlType;
    if (!Equals(controlTypeId, expectedControlType))
    {
        return false;
    }

    return true;
}
person Shane Powell    schedule 11.10.2018