2012-01-30 11 views
10

Stavo lavorando a un'applicazione di monitoraggio della sicurezza e l'approccio migliore che ho trovato era Skype.C# Skype Videochiamata API

quando una possibile intrusione si verifica l'applicazione chiama un ID Skype specificato che è probabilmente il mio telefono Android ho finito con tutte le cose di elaborazione delle immagini. Ma io sono bloccato con questa API Skype ho scritto questo pezzo di codice:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using SKYPE4COMLib; 


namespace SkypeCall 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Skype skype; 
      skype = new Skype("Skype4COM.Skype", "Skype_"); 

      Call call = skype.PlaceCall(SkypeID); 
      call.StartVideoSend(); 
     } 
    } 
} 

Questo avvia una chiamata vocale, ma nel call.StartVideoSend(); mostra un errore

An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in SkypeCall.exe 

Additional information: CALL: Action failed 

Ho anche provato this ma credo che sia vecchia API e non poteva ottenere nulla fuori di esso. E nemmeno inviando commands.

se qualcuno mi aiutasse sarebbe grato.

risposta

5

Penso che sia necessario attendere fino al collegamento della chiamata.

modo più semplice sarebbe quella di testare la call.Status

class Program 
    { 
     static void Main(string[] args) 
     { 
      Skype skype; 
      skype = new SKYPE4COMLib.Skype(); 
      string SkypeID = args[1]; 
      Call call = skype.PlaceCall(SkypeID); 
      do 
      { 
       System.Threading.Thread.Sleep(1); 
      } while (call.Status != TCallStatus.clsInProgress); 
      call.StartVideoSend(); 
     } 
    } 

Si potrebbe anche aggiungere un evento, tuttavia credo che questo sarà il fuoco su ogni chiamata in modo meno che non si sta utilizzando solo per questo progetto potrebbe essere troppo.

class Program 
    { 
     static string SkypeID = ""; 
     static void Main(string[] args) 
     { 
      Skype skype; 
      skype = new SKYPE4COMLib.Skype(); 
      skype.CallStatus += new _ISkypeEvents_CallStatusEventHandler(skype_CallStatus); 
      Call call = skype.PlaceCall(SkypeID); 

      Console.ReadKey(); 
     } 

     static void skype_CallStatus(Call pCall, TCallStatus Status) 
     { 
      if (Status == TCallStatus.clsInProgress && pCall.PartnerHandle == SkypeID) { pCall.StartVideoSend(); } 
     } 
    } 
+0

Grazie a milioni @Matt –