- ベストアンサー
MediaPlayerコントロールのイベントハンドラをJScriptで
JavaScriptの範疇でよいのか微妙な問題ですが MicrosoftのWindows Media Player OLE/ActiveXコントロール をJScript & IE で使用しています。 IDLにて定義されている dipsinterface _MediaPlayerEvents の PlayStateChange にハンドラを登録したいのですが,できません。 回答だけでなく,JScriptでは無理。VBScriptなら…等の情報でもありがたいです。 よろしくお願いします。 以下は,そのMedia Playerコントロールを使用したHTMLのコードです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そんなことができるんだろうかと思いつつMSDNを探したら(英語ですが)サンプルページがありました。デモも動きます。私には解説はできませんが参考になれば。
その他の回答 (1)
- FlossenEngel
- ベストアンサー率77% (132/170)
すみません、先ほどのサンプルページですが、ネスケ用にいろいろ小細工してて実はIE用には次のコードしか必要無いようです(^^;) <SCRIPT FOR="MediaPlayerのOBJECT ID" EVENT="PlayStateChange(oldState,newState)" LANGUAGE="Jscript"> switch(newState) { case 0: //STOPの時の処理 break; case 1: //PAUSEの時の処理 break; case 2: //PLAYの時の処理 break; } } </SCRIPT>
補足
あ,わざわざ,ありがとうございます。 わたし自身は,英語の解説も苦じゃない体質なので,先ほどのURLの情報でばっちりできました。 >>ネスケ用にいろいろ小細工してて というのは,逆に「ネスケでも動くのか!!」という感動(?)と共に手元のPCにもネスケをインストールかましている次第です~。勉強になるなぁ。 # ふぅ,No.2を書き込んでいただいたおかげで,まともなお礼書くことが出来ました。(^^;;
お礼
情報ありがとうございます。 上が質問で切れてしまった,わたしの作成したHTMLコードです。 # 質問する側にとっては,なかなか制限が多いですね,ココ。
補足
<HTML> <script language="JavaScript"> <!-- var wr=document.write; function get_index(obj,separater){ str=""; for(i in obj){ str+=i+separater; } return str; } function make_option(array){ var str=""; for(i in array){ str+='<OPTION value="'+i+'">'+i+'</OPTION>\n'; } return str; } var rateChange=new Array(); rateChangeDefaultIndex=2; rateChangefunc=function (base,xxx){ mplayer.Rate=base*Math.pow(1.1,xxx); it_dispRate.value=mplayer.Rate; } rateChange["標準"]=function (obj){ obj[rateChangeDefaultIndex].selected=true; rateChangefunc(1,0); } rateChange["<<"]=function (obj){ obj[rateChangeDefaultIndex].selected=true; rateChangefunc(mplayer.Rate,-1); } rateChange["--"]=function (obj){ } rateChange[">>"]=function (obj){ obj[rateChangeDefaultIndex].selected=true; rateChangefunc(mplayer.Rate,+1); } var dispmode=new Array(); dispmode["時間表示"]=function (){ mplayer.DisplayMode=0; }; dispmode["フレーム表示"]=function (){ mplayer.DisplayMode=1; }; --> </script> <body> <OBJECT ID="mplayer" CLASSID="clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95" TYPE="application/x-oleobject"><!-- IMediaPlayerObject --> </OBJECT><br> <input id=if_file type=file onChange="FileOpen(if_file.value)"><br> <select id=s_dispmode onChange="dispmode[s_dispmode.value]()"> <script language="JavaScript"><!-- wr( make_option(dispmode) ); s_dispmode[1].selected=true; dispmode[s_dispmode[1].value](); --></script> </select> <input type=button value="<<" onClick='rateChange["<<"](s_rateChange)'> <select id=s_rateChange onChange="rateChange[s_rateChange.value](s_rateChange)"> <script language="JavaScript"><!-- wr( make_option(rateChange) ); s_rateChange[rateChangeDefaultIndex].selected=true; --></script> </select> <input type=button value=">>" onClick='rateChange[">>"](s_rateChange)'> <input type=text id=it_dispRate value=1 size=3 readonly>倍速 <br> <pre> 2つのボタン,"<<" と ">>"の間にあるBoxはホイールマウスでクリクリすると,エエ感じです。 フレーム数表示は対応codecでないと時間表示になります。 再生速度は,停止すると1倍速にリセットされます。 再生速度の上限,下限はcodecにより異なります。 </pre> <script language="JavaScript"> <!-- with( mplayer ){ PlayCount=0; AutoRewind=true; ShowStatusBar=true; SendPlayStateChangeEvents=true; } function FileOpen(_name){ //mplayer.Rate=2; mplayer.FileName=_name; //mplayer.SelectionStart=60; //mplayer.EnablePositionControls=false; //mplayer.EnableTracker=false; it_dispRate.value=mplayer.Rate; s_rateChange.focus(); } mplayer.PlayStateChanged=function (old_state,new_state){ alert("change"); it_dispRate.value=mplayer.Rate; } --> </script> </body> </HTML>