通过Skype4COM.dll COM API控制Skype

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

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

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

谢谢你的帮助,肯尼

我们发现你可以通过发送’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" ); } 

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

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

我有同样的问题,而且

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