通过Skype4COM.dll COM API控制Skype

时间:2009-03-09 18:43:09

标签: c# com skype

我正在使用C#使用Skype4COM.dll COM API,它可以很好地满足我们所需的所有通信功能。我们正试图在Skype上放置一个更容易使用的界面,这个界面已经融入了我们的应用程序。

我的麻烦在于控制或禁用哪些Skype窗口使用而不使用。我相信我唯一需要的Skype窗口是Skype视频电话/会议窗口。我想隐藏和控制Skype可以呈现的每个窗口。我甚至想禁用在来电时弹出的来电对话窗口,因为我们将展示自己的答案提示。除了窗口管理之外,我对API很满意。

使用API​​,我可以看到如何启用Windows,但我似乎无法弄清楚如何隐藏它们,而不是将Windows消息黑客攻击到Skype应用程序。我错过了什么吗?

感谢您的帮助,Kenny

3 个答案:

答案 0 :(得分:6)

我们发现你可以通过

发送'Skype Commands'
skypeobj.SendCommand ( Command cmd );

对于我们需要的大部分内容来说,这非常有效。这是一个reference on the Skype developer site

一些代码:

    void _SendSkypeCommand ( string cmdToSend )
    {
        Command cmdSkype = new Command ();
        cmdSkype.Blocking = true;
        cmdSkype.Timeout = 2000;
        cmdSkype.Command = cmdToSend;
        Trace.WriteLineIf ( _TracingDetailed, string.Format ( "skype command sent '{0}'", cmdToSend ) );
        _skype.SendCommand ( cmdSkype );
    }

    void _hideSkypeWindows ()
    {
        _SendSkypeCommand ( "SET SILENT_MODE ON" );
        _SendSkypeCommand ( "SET WINDOWSTATE HIDDEN" );
    }

答案 1 :(得分:1)

不幸的是,界面实际上并不能让你控制实际的窗口,只能显示和修改它们的方法(通过包装器)。

正如你所说,你必须以某种方式得到窗口的句柄,然后发送一条消息来隐藏它。

答案 2 :(得分:0)

我有同样的问题,

_SendSkypeCommand(“SET SILENT_MODE ON”);

已被打破,正如在这篇文章中所说:http://devforum.skype.com/t5/Desktop-API/How-to-keep-hidden-Skype-UI-using-Skype4COM/td-p/12338

我的解决方案是通过将窗口移出显示区域使skype UI不可见。

现在代码:

 [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
    [DllImport("user32.dll", SetLastError = true)]
    internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);        
    IntPtr hwnd = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "tSkMainForm", null);//find skype window                  
    MoveWindow(hwnd, 2300, 2300, 300, 400, true);