6

我正在使用 C# 使用Skype4COM.dll COM API,它非常适合我们需要的所有通信功能。我们正在尝试在嵌入到我们应用程序中的 Skype 之上放置一个更易于使用的界面。

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

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

谢谢你的帮助,肯尼

4

3 回答 3

5

仔细研究了一下,我们发现您可以通过以下方式发送“Skype 命令”

skypeobj.SendCommand ( Command cmd );

这对于我们需要的大部分内容都非常有效。这是Skype 开发者网站上的参考

一些代码:

    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" );
    }
于 2009-03-10T13:54:21.227 回答
1

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

正如您所说,您必须以某种方式获取窗口的句柄,然后发送消息将其隐藏。

于 2009-03-09T18:49:24.460 回答
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);
于 2013-05-30T03:32:37.213 回答