Управление Skype через COM-интерфейс Skype4COM.dll - PullRequest
6 голосов
/ 09 марта 2009

Я работаю с Skype4COM.dll COM API с использованием C #, и он работает очень хорошо для всех необходимых нам функций связи. Мы пытаемся поместить более простой интерфейс поверх Skype, который встроен в наше приложение.

Моя проблема заключается в управлении или отключении того, какие окна Skype использовать и не использовать. Мне кажется, мне нужно только окно Skype - это видео-телефон Skype / окно конференции. Я хотел бы скрыть и контролировать все остальные окна, которые может отображать Skype. Я даже хотел бы отключить диалоговое окно входящего вызова, которое всплывает на входящие вызовы, так как мы представим нашу собственную подсказку ответа. Я доволен API, кроме управления окнами.

С помощью API я вижу, как включить Windows, но не могу понять, как их скрыть, если не считать взлома сообщения Windows в приложении Skype. Я что-то упустил?

Спасибо за вашу помощь, Кенни

Ответы [ 3 ]

6 голосов
/ 10 марта 2009

Немного потрудившись, мы обнаружили, что вы можете отправлять «Команды 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" );
    }
1 голос
/ 09 марта 2009

К сожалению, интерфейс на самом деле не дает вам контроль над фактическими окнами, а только методы их отображения и изменения (через обертки).

Как вы сказали, вам нужно каким-то образом получить дескриптор окна, а затем отправить сообщение, чтобы скрыть его.

0 голосов
/ 30 мая 2013

У меня такая же проблема, как и у

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