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