Skype4COMでJavaScriptからSkypeを操作

社内でSkypeを使い始めた。IP Messengerを卒業したい。こういうのは全員一斉にやらないと意味がないのでなかなか思い切れなかったが、とりあえず導入するところまではできた。

で、Skypeについて調べていたら、Skype4COMというのがあるのがわかった。SkypeをCOMで操作する公式インタフェース。

インストール

Skype公式の開発者向けページ

でダウンロードする。解凍すると

  • Skype4COM.chm
  • Skype4COM.dll

というファイルが出てくるので、これをどこか適当な場所に配置して、レジストリ登録する。

regsvr32 Skype4COM.dll

これで「成功しました」と表示されたらOK。

発言してみる

早速、Skypeのチャットに発言するJavaScriptを書いてみた。

var skype = new ActiveXObject('Skype4COM.Skype');
var chats = new Enumerator(skype.Chats);
for(; !chats.atEnd(); chats.moveNext()){
  var chat = chats.item();
  if(/hogehoge/.test(chat.FriendlyName)){
    chat.SendMessage('テスト送信');
  }
}

自分のチャット一覧を取得してループし、"hogehoge" が名前に含まれるチャットを見つけたら、そこに「テスト送信」という発言する、という内容のスクリプトドキュメントを見ながら書いたら簡単だった。

例えばこのスクリプトをタスクスケジューラに登録しておいて、毎日18時に「定時ですよ」と自動発言するなどの使い方がある。Subversionにコミットされたときにその内容を発言するとかもいいね。

セキュリティ

一応、勝手にスクリプトが悪い事をしないように、最初にこれを動かしたときに「wscript.exeとの連携を許可する?」という確認ダイアログが出る。

普通のexeなアプリならまあいいけど、「wscript.exe」はちょっと範囲が広すぎじゃないかな...。いいスクリプトを許可すると、悪いスクリプトまで含めたすべてのスクリプトが許可されてしまう。悪いスクリプトを拒否すると、いいスクリプトまで含めたすべてのスクリプトが拒否されてしまう。

スクリプトのコードのハッシュ値ごとに許可/拒否が設定できた方がいいような気がするけど。まあいいや。

いろいろ考える

ドキュメントを読む感じでは、かなりいろんなことができるっぽい。SkypeGUIで可能なことの大半はAPIからも呼べるのかな。

COMなので、別にJavaScriptじゃなくてもWindows上で動く大抵のプログラムから呼び出せると思う。なんか面白いものを作りたいと思った。