【问题标题】:Controlling Skype via its Skype4COM.dll COM API通过 Skype4COM.dll COM API 控制 Skype
【发布时间】:2010-10-12 06:25:45
【问题描述】:

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

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

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

感谢您的帮助,肯尼

【问题讨论】:

    标签: c# com skype


    【解决方案1】:

    我们发现您可以通过以下方式发送“Skype 命令”

    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" );
        }
    

    【讨论】:

    • 我也有类似的问题。解决方案非常好,但是......也许可以在没有登录客户端的情况下控制呼叫、消息等?还是“更好地隐藏”(托盘中没有图标)?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我也有同样的问题,

      _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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-24
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多