1

ボタンがあるwinformアプリを開発しようとしています。ボタンをクリックすると、以下のように、システム タスクバーの lync アイコンにカーソルを合わせたときに表示される lync ウィンドウのリストが表示されます。

黒く塗りつぶされた部分には、チャット参加者の名前が含まれています

winform のボタン クリックで同じ機能を得るにはどうすればよいですか。

Lync SDK 2013 を使用していますが、2010 でも問題ありません。

要約すると、フォームのボタンでタスクバーの lync アイコンにカーソルを合わせたときの機能をシミュレートしたいと思います。ボタンをクリックすると、会話のリストが表示され、アクティブ/最新のものが強調表示され、それをクリックすると、その特定の会話ウィンドウが表示されます。 何か案は?

ありがとう

4

2 に答える 2

2

すべての Lync 会話を探している場合は、SDKのConversationManager.Conversationsプロパティを使用します。ConversationManger には ConversationAdded および ConversationRemoved イベントもあるため、リストをリアルタイムで更新し続けることができます。

于 2014-06-03T09:56:39.823 に答える
1

ちょっと見にくいですが、会話ウィンドウを検出しようとすると、Windows API 関数を使用してすべてのウィンドウを列挙してEnumWindowsから、ウィンドウ クラスを確認するしかありませんでした"LyncConversationWindowClass"。しかし、これは Lync 2010 を使用して 1 年以上前のことです。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;
        }
    }
}
于 2014-06-03T07:16:59.083 に答える