Let's REFOCUS on winampjacking

1.問題提起

    今回はWinAmp操作の第2回目。軽く前回のおさらいをすると・・・

  1. WinAmpはそのウインドウにメッセージを送ることで操作できる。
  2. ウインドウのハンドルはFindWindow関数にキャプション"Winamp v1.x"を指定して行う。
  3. ファイルのオープンは、コマンドライン引数にファイル名を渡してWinAmpを起動する。

ということでした。今回は、WinAmpから色々なデータを取得する方法です。前回も書きましたが、詳細な情報は、WinAmp APIのページを参考にしてください。

2.方法

 ファイル再生の時には、とりあえず再生しているファイルの演奏時間の長さを求める必要があります。これは、現在、どの位置を再生しているかというバーのようなものを描写するときにも必要になります。

 これまでの基本動作(再生、停止など)はウインドウにWM_COMMANDメッセージを送って行いましたが、情報の取得などはWM_USERメッセージを使用します。ファイルの演奏時間の長さは、以下のようにして取得できます。

    length = SendMessage(WAwnd, WM_USER, 1,105) * 1000;

 繰り返すと、WAwndはFindWindow関数で取得したWinAmpのウインドハンドルです。戻り値のファイルの演奏時間は秒単位なので、1000をかけてミリ秒単位に変換しています。

 現在演奏中のポジションをミリ秒単位で取得するには、以下のようにします。

        pos = SendMessage(WAwnd, WM_USER, 0,105);

 先ほどの演奏時間の長さの取得の時と、第3引数が異なるだけです。逆に、現在演奏中のポジションをミリ秒単位で指定するには、つまり任意のポジションにシークをさせるためには、以下のようにします。

        SendMessage(WAwnd, WM_USER, pos, 106);

 また引数が微妙に異なるだけですね。他にも、プレイリストの操作、EQの設定、ボリューム、パンポットの設定など、WinAmpの操作画面でできることはほとんどできてしまいます。

※なお、このWinAmpの操作は、WinAmpバージョン3以降からはサポートされなくなっています。バージョン2以下のWinAmpを使用してください。


[特集コーナー 一覧に戻る]

[洋書の林 トップに戻る]