C#でSkypeAPIを使ってみた その2

chakemiです。季節はもうすっかり秋ですが、家ではエアコンをガンガンに使ってます。

今日は、前回に引き続き、SkypeAPIをもう少し触ってみようと思います。

開発環境

  • Windows7
  • Visual C# 2010 Express

前回のテストでは、ホント繋がるか確認するためだけで Skypeが起動していることが、必須条件だったり Callしたらしっぱなしだったんで、今日はアプリケーションを実行した際、 Skypeが起動しているか確認し、起動していなかったら Skypeを起動するような機能をつけようと思います。

では、前回のコードを改修してみます。

まず、axSkype1.Client.IsRunningプロパティでSkypeが起動しているかを 確認します。

起動していないなら、axSkype1.Client.Start()メソッドでSkypeを起動します。ここで、axSkype1.Attch()メソッドに引数を追加します。

第一引数はSkypeのプロトコル番号になるのですが、SkypeAPIのバージョンによって変わるようです。 詳しくはの、Skype protocolの項を参考に。

第二引数は、Skypeからの接続応答が返ってくるのを待つかどうかをboolで指定します。

ここで、応答を返すまで待ったほうがいいように思いますが、Skypeが起動していない場合、axSkype1.Client.Start()メソッドが実行されSkypeが起動しますがその後、応答が無いようでエラーとなってしまいました。

ここでは、falseを指定し、とりあえずFormがロードできるようにします。 これで、Skypeが起動していない状態でもアプリケーションが実行できるようになりました。

1

2

3

4

5

6

7

8

private void Form1_Load(object sender, EventArgs e)

{

    if (axSkype1.Client.IsRunning == false)

    {

        axSkype1.Client.Start();

    }

    axSkype1.Attach(8, false);

}

ついでに、Callしたら通話の切断もほしいとこなので、 通話切断ボタンも作ってみます。

通話の切断には、PlaceCall()メソッドの戻り値を取得し、Finish()メソッドで終了出来るようなので まず、PlaceCall()メソッドの戻り値であるCallオブジェクトをインスタンス生成します。

CallインスタンスでPlaceCall()メソッドの戻り値を取得したら 切断ボタンのイベントハンドラで、Finish()してあげれば完了です。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

//Callインスタンス生成

SKYPE4COMLib.Call call;

private void Form1_Load(object sender, EventArgs e)

{

    if (axSkype1.Client.IsRunning == false)

    {

        axSkype1.Client.Start();

    }

    axSkype1.Attach(8, false);

}

private void button1_Click(object sender, EventArgs e)

{

    //戻り値を取得

    call = axSkype1.PlaceCall("echo123");

}

private void button2_Click(object sender, EventArgs e)

{

    //通話切断

    call.Finish();

}

とりあえず、通話と切断が出来るようになりましたが、 まだまだStatusで処理を加えていかないと使い物にならなそうです。。。

Comments