Отображение списка окон 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;
}
}
}