我正在使用C#使用Skype4COM.dll COM API,它可以很好地满足我们所需的所有通信功能。我们正试图在Skype上放置一个更容易使用的界面,这个界面已经融入了我们的应用程序。
我的麻烦在于控制或禁用哪些Skype窗口使用而不使用。我相信我唯一需要的Skype窗口是Skype视频电话/会议窗口。我想隐藏和控制Skype可以呈现的每个窗口。我甚至想禁用在来电时弹出的来电对话窗口,因为我们将展示自己的答案提示。除了窗口管理之外,我对API很满意。
使用API,我可以看到如何启用Windows,但我似乎无法弄清楚如何隐藏它们,而不是将Windows消息黑客攻击到Skype应用程序。我错过了什么吗?
感谢您的帮助,Kenny
答案 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);