HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0316
TAKAiTunesを操作2未解決


TAKA

リンク

2007/3/16(Fri) 13:55:06|NO.6337

こんにちは、TAKAです。
結構前に以下のようなスクリプトを見つけました。
たしかメルマガか何かのだった気がします。

; iTunesを使う title "iTunes monitor" screen 0,320,60:sysfont 17:objsize 120,20:pos 188,10 newcom iTunes, "iTunes.Application" button gosub "play",*i_play button gosub "pause",*i_pause *main track = iTunes("CurrentTrack") redraw 0:syscolor 15:boxf color 0,0,0:pos 8,8 mes "Now Playing :" mes ""+track("Name")+"\n("+track("Artist")+")" redraw 1:wait 300:delcom track:goto *main *i_play iTunes->"Play" return *i_pause iTunes->"Pause" return
これを実行すると曲名等の取得が出来るのですが、
iTunesを起動したばかりの何も再生されていない状態で起動するとエラーが出てしまいます。

方法としては、再生中かどうかを取得できれば回避できると思ったのですが、
いい方法が見つかりませんでした。

再生していなくてもエラーが出ない方法があれば、ご教授願います。



この記事に返信する


ryu-jin

リンク

2007/3/18(Sun) 17:06:29|NO.6410

こんにちは、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;

私の環境では、エラー終了しなくなったのですが、
これでいいでしょうか。



TAKA

リンク

2007/3/18(Sun) 18:54:03|NO.6413

>comオブジェクトがなんなのか、さっぱり分からなかったのですが、
>VARIANT型変数の値が、起動時と再生時で異なっていたので、
>この違いで、判定してあげればよいと思います。

さっぱりわからなかった割にはさすがです!!
私の環境でもエラーせずにできました!!

VARIANT型変数がどんなものか分かりませんが、
思っていた動きが出来そうです!
色々COMを調べて機能追加して行きたいと思います。

どうもありがとうございました!

と、1度書いたのですが…
色々と聞きたいことが出来ましたので、そのまま記事を続けさせていただきます。

まずは、
操作中にiTunesで「×」を押した時(iTunesを終了)ですが、
以前と同じようにエラーが表示され、終了してしまいます。
onerrorで飛ばして出来ると思ったのですが、どうもうまくいきませんでした。

あと、Volume表示機能を追加してくださったみたいですが、
逆に指定した値に変更することなどは可能なのでしょうか?
COM操作のマニュアルには出来そうな感じで書いてあるのですが、
詳しい方法が分かりませんでした。

もしお分かりであれば教えていただきたいと思います。



ONION software Copyright 1997-2021(c) All rights reserved.