Отображение списка окон Lync по нажатию кнопки

Я пытаюсь разработать приложение winform, где есть кнопка. При нажатии кнопки список окон Lync должен отображаться в том виде, в котором они появляются, когда мы наводим курсор мыши на значок Lync на панели задач системы, как показано ниже.

Заштрихованная часть содержит имена участников чата

Как я могу получить такую ​​же функциональность при нажатии кнопки на моей winform.

Я использую Lync SDK 2013, но с 2010 также все в порядке.

Итак, в заключение, я хочу смоделировать функцию, когда мы наводим курсор мыши на значок lync на панели задач в кнопке в моей форме. При нажатии кнопки будет отображен список разговоров с выделенным активным / самым последним разговором, и нажатие на него приведет к открытию конкретного окна разговора. Есть идеи?

Спасибо

2 ответа

Если вы ищете все разговоры Lync, используйте свойство ConversationManager.Conversations в SDK. В ConversationManger также есть события ConversationAdded и ConversationRemoved, так что вы можете обновлять свой список в режиме реального времени.

Это немного уродливо, но когда я попытался определить окна разговора, у меня не было другого выбора, кроме как перечислить все окна с помощью функции Windows API EnumWindows а затем проверьте класс окна "LyncConversationWindowClass", Но это было более года назад с использованием Lync 2010 - не знаю, работает ли он с Lync 2013 или есть еще лучшее решение.

По крайней мере, этот код не требует Lync SDK.;-)

Вот мой фрагмент кода, надеюсь, это поможет:

void Test()
{
    int conversationWindowCount = WindowDetector.Count("LyncConversationWindowClass");
}

static class WindowDetector
{
    private delegate bool CallBackPtr(int hwnd, int lParam);

    [DllImport("user32.dll")]
    private static extern int EnumWindows(CallBackPtr callPtr, int lPar);

    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

    private static readonly object Lock = new object();

    private static int _count;
    private static string _className;

    private static bool EnumWindowsCallback(int hwnd, int lparam)
    {
        var sb = new StringBuilder(255);
        GetClassName(new IntPtr(hwnd), sb, sb.Capacity);
        string className = sb.ToString();

        if (className == _className)
        {
            _count++;
        }

        // return true to continue enumerating or false to stop
        return true;
    }

    /// <summary>
    ///     Returns the count of windows which have the specified class name.
    /// </summary>
    /// <param name="className">The window class name to look for (case-sensitive).</param>
    public static int Count(string className)
    {
        lock (Lock)
        {
            _count = 0;
            _className = className;

            EnumWindows(EnumWindowsCallback, 0);

            return _count;
        }
    }
}
Другие вопросы по тегам