• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C# WMPメディアの終了検知 その2)

C# WMPメディアの終了検知 その2

このQ&Aのポイント
  • C#でWMPメディアの終了を検知する方法について、直接終了イベントを使用する方法について教えてください。
  • 現在は、axWindowsMediaPlayer1_PlayStateChangeメソッドを使用して終了を検知していますが、他にも直接イベントを拾う方法があるようです。
  • 詳しい実装方法やサンプルコードを教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

イベントハンドラの使い方について勉強して欲しいところですが……。 http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_013/csharp_abc01.html http://www.ipentec.com/document/document.aspx?page=csharp-play-wave-file-use-media-player&culture=ja-jp に書かれている方法でSystem.Windows.Mediaが使える状態になったとして、 MediaPlayerクラスのインスタンスを作成した時にイベントハンドラを登録します。  mp = new MediaPlayer();  mp.MediaEnded += new EventHandler(mp_MediaEnded); こんな感じですかね。 VisualStudioを使っているのならば"+="まで入力した所でTABキーによる補完を実行すると、 イベントハンドラのメソッド(のひな形)まで作成してくれます。 # TABキー2回押して下さい。(VisualStudio C# 2010 ExpressEditionで確認。) 再生が終了するとMediaEnded イベントが発生し、設定されたイベントハンドラがコールされます。 コールされたイベントハンドラからフォームのコントロールってそのまま操作出来なかったかと思われますが…。 # SerialPortのDataReceivedイベントで、デリゲートとInvokeでデータ引き渡していた記憶が。 # キーワードで検索して下さいな。 # http://hippos-lab.com/blog/node/337 とか参考になりますかねぇ…。

tatapatank
質問者

お礼

早速の回答、ありがとうございます。 おかげさまで、何とか実現できました。 今までVSの自動クリックイベントの追加に慣れきっていたため、 手書きでイベントを追加する方法が解りませんでした^^; これからは、極力手書きでできるようにします。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C#での書き方

    vb.netでは別のイベントを呼び出すとき下記のような書き方ができたのですが、C#ではどう書くんでしょうか? (ボタン2を押したらボタン1の処理が走る) Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MessageBox.Show("AAA") End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Button1_Click(sender, e) End Sub

  • FireFoxで動画(音楽)再生終了をイベントを検知する方法

    お世話になっています。 動画(音楽)ファイル再生終了後に処理を実装したいと考えています。 IEではEndOfStreamで動作するのですが、 FireFoxでは動きません。 FireFoxで再生終了を検知するにはどうしたらよいでしょうか。 -----サンプル----- <object id="p1" classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"> <param name="FileName" value="movie.mpg"> <param name="AutoStart" value="true"> </object> <script for="p1" event="EndOfStream(lResult)" type="text/javascript"> <!-- 処理を実装・・・ --> </script>

  • C# WEB表示について

    フォーム上にwebBrowser1があって下の通りに読み込み完了しましたと出ますが、 webBrowser1に表示されません。どうしたらいいですか? webBrowser1のプロバティでイベントを利用するのではなくコードで作りたいので、どなたか教えて頂けませんか? ボタン1はヤフーで、ボタン2とかも製作したいので。 ソース private void button1_Click(object sender, EventArgs e) { WebBrowser webBrowserForPrinting = new WebBrowser(); webBrowserForPrinting.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webview); webBrowserForPrinting.Url = new Uri("http://www.yahoo.co.jp/"); } private void webview(object sender,WebBrowserDocumentCompletedEventArgs e) { MessageBox.Show("Webページの読み込みが完了しました!!"); }

  • プロセス終了の検知について

    Win2000、VB.net、.NET Framework 1.1 でWindowsアプリケーションを作成しています。 画面が表示されていない状態で、ある処理を行っている時に タスクマネージャからプロセスを終了させられたことを検知する イベントを教えてください。 Mainで Application.ApplicationExit, Application.ThreadExit のイベントをAddHandlerで関連付けているのですが タスクマネージャからプロセスを終了しても 関連付けたプロシージャの処理が行われません。 タスクマネージャからプロセスを終了した場合は そのプロセスにメッセージは送られないのでしょうか? また、ある条件になると画面を表示する仕様なのですが 画面を表示中にタスクマネージャからプロセスを終了しても Form_Closingイベントが発生しません。 そういうものなのですか? よろしくお願いいたします。

  • C# フォームを閉じてもプログラムが終了しない

    前略 ・C#の初心者です。 ・下記のようなプログラムを作りたいと思っています。プログラムは<作りたいプログラム>の仕様どうりに動作していますが、Form1のFormClosingイベントに Application.Exit()を追加しないと フォーム1で "X"(閉じる)をクリックしても(フォームは非表示になりますが)プログラムが終了しません。プログラムでどこかおかしな部分があると思っています。Application.Exit()を追加しないでもプログラムを終了する方法を教えてください。 <作りたいプログラム> (1)Form1 のbutton1をクリックすると新しいForm2が作成され表示される。Form2が表示されるとForm1は非表示となる。 (2)Form2 のbutton1をクリックするとForm2が非表示となりForm1が表示される。 (3)Form1 の "X"(閉じる)をクリックしてプログラムを終了する。 //Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace formClose { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Show(); //フォーム2を表示 this.Hide(); //フォーム1を非表示 } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Application.Exit(); //アプリケーション終了 } } } //Form2.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace formClose { public partial class Form2 : Form { Form1 form1 = new Form1(); public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.Close(); //フォーム2を閉じる } private void Form2_FormClosing(object sender, FormClosingEventArgs e) { form1.Show(); //フォーム1を表示する } } } 以上

  • C#にイベントハンドラ(object sender, EventArg

    C#にイベントハンドラ(object sender, EventArgs e) に引数を追加して、 イベントハンドラに値を渡したいのですが、 どのように記述したらいいのでしょうか?

  • C# 関数はどこに書くの?

    c#を始めました。 関数はどこに書けばよいのだろうと思い以下の2つのパターンを書きました。どちらも実行するとちゃんと動いています。 どちらの書き方が正しいのでしょうか?よろしくお願いいたします。 パターン1 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a=3; int n= tasu(a); MessageBox.Show(n.ToString());   //ここに関数を書く int tasu(int a10) { return a10 - 2; } } } パターン2 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a=3; int n= tasu(a); MessageBox.Show(n.ToString()); }   //ここに関数を書く int tasu(int a20) { return a20 -1; } }

  • BackgroundWorkerについて(C#)

    C#でBackgroundWorkerを使ったプログラムを試しています。 Windows Form上にButtonとProgressBarを設置して以下のプログラムを 動作させると、プログレスバーが終了するまえに”終了”が出てしまいますが これはどうしてでしょうか? よろしくお願いいたします。 using System; using System.ComponentModel; using System.Threading; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { button1.Enabled = false; Random rand = new Random(); BackgroundWorker bgWorker = new BackgroundWorker(); bgWorker.DoWork += ((sender2, e2) => { for (int i = 0; i < 10; i++) { Thread.Sleep((int)(rand.NextDouble() * 500)); bgWorker.ReportProgress((i + 1) * 10); } }); bgWorker.RunWorkerCompleted += ((sender2, e2) => { button1.Enabled = true; bgWorker.Dispose(); MessageBox.Show("終了"); }); bgWorker.ProgressChanged += ((sender2, e2) => { progressBar1.Value = e2.ProgressPercentage; }); bgWorker.WorkerReportsProgress = true; bgWorker.RunWorkerAsync(); } } }

  • イベント発生について

    お世話になります。 .NET C#で開発をしております初心者です。 テキストボックスに数字を入力したら、その値をメッセージボックスで ユーザーに確認を促したいのですが、そのイベント発生タイミングを どうしたらいいのか考えています。 現在は下記の様にしています。 まず、TextChangeイベントで、変数に代入してから、Leaveイベントでメッセージボックス を表示させています。 本当は、Leaveイベントでなく、その場でメッセージボックスを表示させたいのですが、 でも、TextChangeイベントだけでは、例えば二桁以上の数字を入力しようとしていた場合、 一桁数字を打ち込む度に、TextChangeイベントが発生してしまい、その度にメッセージボックスが 表示されてしまうので、仕方なくLeaveイベントも使っています。 何か良い方法ってありますでしょうか。 どなたかご親切な方、ご教授頂きたく宜しくお願い致します。                           記 private void textBox1_TextChanged(object sender,EventArgs e) { if(textBox1.Text != "-") { if(textBox1.Text != "") { suuryou = int.Parse(textBox1.Text);   } } } private void textBox1_Leave(object sender,EventArgs e) { if(textBox1.Text != "") { MessageBox.Show(suuryou,"", MessageBoxButtons.OK, MessageBoxIcon.Information); } }

  • タブコントロールの問題 (VB)

    次のようなもんだい問題がVBにて発生しました メソッド 'Private Sub TabControl1_Selected(sender As Object, e As System.Windows.Forms.TabControl)' でイベント 'Public Event Selected(sender As Object, e As System.Windows.Forms.TabControlEventArgs)' を処理できません。シグネチャに互換性がありません。 誰かどうやって修正したらいいか教えてください!!