こんにちは、ryu-jinです。
iTunesが他アプリから操作できるなんて、ビックリしました。
iTunesは、私も使用していて興味が出たので、ちょこっと調べてみました。
comオブジェクトがなんなのか、さっぱり分からなかったのですが、
VARIANT型変数の値が、起動時と再生時で異なっていたので、
この違いで、判定してあげればよいと思います。
以下、スクリです。(機能追加してみました^^;
#include "hspext.as"
//******************
// 起動確認
//******************
aplsel "iTunes"; // iTunesの起動検知
if( stat == 1 ) { // 検索失敗
sdim dmes, 65535;
dmes = "iTunesの準備ができていません。\n";
dmes += "iTunesがすでにインストールされているならば「はい」を、\n";
dmes += "そうでなければ「いいえ」を選択してください。";
dialog dmes, 2, "iTunes検索エラー";
if( stat == 7 ) : end; // 「いいえ」
sdim dmes, 1;
}
//******************
// 初期化
//******************
// 変数
dimtype iTunes, vartype("comobj"), 1;
dimtype tack, vartype("comobj"), 1;
dimtype variant, vartype("variant"), 1;
dim state, 1;
dim volume, 1;
dim data, 1;
newcom iTunes, "iTunes.Application"; // ここで勝手にiTunesを起動してくれる
// 画面
screen 0, 300, 80;
title "iTunes monitor";
sysfont 17;
objsize 120,20;
pos 0, 0 : button gosub "Play / Pouse", *I_PLAYPOUSE;
objsize 60, 20;
pos 120, 0 : button gosub "Next", *I_NEXT;
pos 180, 0 : button gosub "Back", *I_BACK;
pos 240, 0 : button gosub "Prev", *I_PREV;
//******************
// メインループ
//******************
*MAIN
variant = iTunes(".CurrentTrack"); // VARIANT型で取得
state = iTunes("PlayerState"); // 0:pause 1:play?
volume = iTunes("SoundVolume");
redraw 0;
syscolor 15 : boxf;
color 0, 0, 0;
pos 1, 20;
if( state == 1 ) {
mes "Now Playing";
}else {
mes "Now Pouse";
}
// VARIANT型を直接判定するとエラーとなるので、一旦変数に退避
memcpy data, variant, 4, 0, 8; // インデックスを8byte移動し、そこから4byte取得
if( data != 0 ) { // データあり
track = variant("value"); // comオブジェクト型で取得
mes "曲名:"+track("Name");
mes "アーティスト名:"+track("Artist");
mes "アルバム名:"+track("Album");
delcom track;
}
pos 250, 20 : mes strf( "Vol:%3d", volume );
redraw 1;
wait 300;
goto *MAIN;
stop;
//******************
// 再生/一時停止
//******************
*I_PLAYPOUSE
mcall iTunes, "PlayPause";
// 以下のスクリプトでも可?
// if( state == 0 ) { // 停止中
// iTunes->"Play";
// }else { // 再生中
// iTunes->"Pause";
// }
return;
//******************
// 次の曲
//******************
*I_NEXT
mcall iTunes, "NextTrack";
return;
//******************
// 曲の先頭へ移動
//******************
*I_BACK
mcall iTunes, "BackTrack";
return;
//******************
// 前の曲
//******************
*I_PREV
mcall iTunes, "PreviousTrack"
return;
私の環境では、エラー終了しなくなったのですが、
これでいいでしょうか。