2009-03-09 21 views
6

Sto lavorando con lo Skype4COM.dll COM API utilizzando C# e funziona molto bene per tutte le funzionalità di comunicazione di cui abbiamo bisogno. Stiamo provando a mettere un'interfaccia più facile da usare su Skype che è integrata nella nostra applicazione.Controllo di Skype tramite l'API COM Skype4COM.dll

Il mio problema consiste nel controllare o disabilitare le finestre Skype da utilizzare e non utilizzare. L'unica finestra di Skype che credo abbia bisogno è la finestra del videotelefono di Skype. Mi piacerebbe nascondere e controllare ogni altra finestra che Skype può presentare. Mi piacerebbe anche disabilitare la finestra di dialogo della chiamata in entrata che si apre sulle chiamate in arrivo, dal momento che presenteremo il nostro prompt di risposta. Sono felice dell'API tranne la gestione delle finestre.

Con l'API, posso vedere come abilitare Windows, ma non riesco a capire come nasconderlo, a meno di hackerare un messaggio di Windows sull'app Skype. Mi sto perdendo qualcosa?

Grazie per il vostro aiuto, Kenny

risposta

6

Rovistando un po 'abbiamo scoperto che è possibile inviare 'Skype Comandi' via

skypeobj.SendCommand (Command cmd); 

che funziona abbastanza bene per la maggior parte di quello che ci serve. Ecco una reference on the Skype developer site:

Alcuni codice:

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

ho problema simile. La soluzione è molto carina, ma ... forse è possibile controllare chiamate, messaggi, ecc senza client registrati? O 'meglio nascosto' (senza icona nel vassoio)? – Saint

1

Purtroppo, l'interfaccia non in realtà consentono di controllare le finestre attuali, solo i metodi per visualizzare e modificare (tramite wrapper).

Come hai detto, dovrai in qualche modo ottenere il manico della finestra e poi inviare un messaggio per nasconderlo.

0

Ho lo stesso problema, e il

_SendSkypeCommand ("set SILENT_MODE ON");

è stato rotto, come si dice in questo post: http://devforum.skype.com/t5/Desktop-API/How-to-keep-hidden-Skype-UI-using-Skype4COM/td-p/12338

La mia soluzione è rendere Skype UI invisibile spostandolo finestra fuori dell'area di visualizzazione.

codice Ora:

[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); 
Problemi correlati