Управление Skype через COM-интерфейс Skype4COM.dll
Вопрос
Я работаю с COM API Skype4COM.dll , используя C #, и он работает очень хорошо для всех коммуникационных функций нам нужно. Мы пытаемся поместить более простой интерфейс поверх Skype, который встроен в наше приложение. Р>
Моя проблема заключается в контроле или отключении того, какие окна Skype использовать и не использовать. Мне кажется, мне нужно только окно Skype - это видео-телефон Skype / окно конференции. Я хотел бы скрыть и контролировать все остальные окна, которые может отображать Skype. Я даже хотел бы отключить диалоговое окно входящего вызова, которое всплывает на входящие вызовы, так как мы представим нашу собственную подсказку ответа. Я доволен API, кроме управления окнами. Р>
С помощью API я вижу, как включить Windows, но не могу понять, как их скрыть, если не считать взлома сообщения Windows в приложении 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 невидимым, переместив его окно за пределы области отображения.
Теперь код:
[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);