2012-01-30 1 views
10

Я работал над приложением для мониторинга безопасности, и лучшим подходом я нашел Skype.C# Skype API Видеозвонок

Когда возможное вторжение происходит, приложение вызывает определенный Skype ID, который, вероятно, является моим телефоном Android. Я сделан со всеми материалами обработки изображений. Но я застрял с этим Skype API я написал этот кусок кода:

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(); 
     } 
    } 
} 

Это инициирует голосовой вызов, но в call.StartVideoSend(); показывает ошибку

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

Additional information: CALL: Action failed 

я даже пытался this но я предполагаю, что это старый API и не мог ничего из этого. И даже не отправив commands.

Если кто-то мне поможет, я буду благодарен.

ответ

5

Думаю, вам нужно подождать, пока звонок не будет подключен.

простым способом было бы испытать 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(); 
     } 
    } 

Можно также добавить событие, тем не менее, я думаю, что это будет срабатывать на каждый вызов так что если вы только использовать его для этого проекта может быть слишком много.

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

Благодаря миллиону @Matt –