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

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

conversation.End();

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

1 Ответ

0 голосов
/ 12 октября 2018

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

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

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

Вот пример способа использования автоматизации 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...