参考にしたのは、http://itpro.nikkeibp.co.jp/のサンデー・プログラマのためのSkype入門の連載。会員登録しないと全部読めないかもしれません。
これによると、Winodwsメッセージを使っているSkypeAPIを直接操作するよりも、ActiveSというラッパーで操作した方が楽なのでそうで、それをインストールしました。
ActiveSが配布されているのは、KhaosLabs。メニューのProductsからたどっていって入手し、インストールします。インストールすると、ActiveXコンポーネントとして登録されます。C#で利用する場合は上記の連載にしたがってください。
Delphi2006で使えないかと思っていろいろ調べてみました。最終的にツールパレットの中にこのコンポーネントをいれなくてはいけません。いままではパッケージライブラリ(*.bpl)を取り込んだことははあるのですが、今回は何もないので苦労しました。これが最善なのかは分かりませんが、とりあえずできたので、その方法を残しておきます。
新規作成でパッケージを作ります。プロジェクトマネージャーにProject1.bplというファルが現れるので、これをいったん保存します。適当な場所にフォルダを作って保存します。名前はActiveSとしておきます。これでプロジェクトマネージャーに表示されていたファイルがActiveS.bplになります。
次にメニューバーのコンポーネントメニュー中のコンポーネントのインストールを選びます。コンポーネントの種類を「ActiveXコントロールの取り込み」として次へボタンを押します。しばらくすると登録されたActiveXコントロールの一覧が表示されるので、その中からActiveSを選択し、次へボタンを押します。コンポーネントの名前などを設定する画面が現れるので、パレットページ名をActiveSにしておきます。他の名前でもかまいませんが、この名前がツールパレットの分類名になります。コンポーネントラッパーの作成はチェックでいいと思います(よくわかりませんが)。次へボタンを押して、ユニットの作成チェックして、完了ボタンを押します。このファイルをいったん先ほどのプロジェクトを保存した場所に保存します。そのあとプロジェクトマネージャーのActiveS.bplの上で右クリックでメニューを出し、追加を選びます。出てきた参照ボタンを押したあと、先のSKYPEAPILib_TLB.pasを選んで、追加します。プロジェクトマネージャーのActiveS.bplの上で右クリックをし、メニューの中にあるインストールを選びます。これで自動的にコンパイルされ、コンポーネントがインストールされます。新しいコンポーネントはツールパレットの一番下に追加されます。
以後、フォームを作るとき、ツールパレットからActiveSコンポーネントを選ぶことができるようになります。あとは、上記のITProの連載なりを参考にすればプログラムが作れます。
「第2回 ActiveS COM Wrapperを使ってみる」の4ページ目のC#のプログラムはこんな感じになるでしょう。フォームへのコンポーネントの配置、オブジェクトインスペクタ上でラベル名の付け替え、イベントの割り当てなどの作業が必要になります。
unit skypetest;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,SKYPEAPILib_TLB, StdCtrls, OleCtrls,TypInfo, OleServer;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Access1: TAccess;
Conversion1: TConversion;
procedure Access1APIStatusChanged(ASender: TObject; Status: TOleEnum);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Access1APIStatusChanged(ASender: TObject; Status: TOleEnum);
begin
if Status = apiAttachSuccess then
Label2.Caption := Conversion1.SkypeOnlineStatusAsText(Access1.CurrentUserStatus)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Access1.Connect;
end;
end.