Yahoo!動画を最前面にして表示する

Yahoo!動画

最近 GyaOYahoo!動画をよく見るのですが、全画面で表示していると、仕事ができない、、、というか、仕事中に TV を見るな、とも言えますが、まあ、そのあたりは脇に置いて、、、エディタやら Visual Studio やらを使いながら、動画も眺めてみたいわけです。

そうすると考えられるのは、

1. IE をトップ画面にする
 → すると、常に前面に出てくるので、他のアプリの邪魔をしない。
2. 広告やらメニューの部分はいらないから、最小で表示する。
 → ウィンドウのタイトルバーを無しにすればいけそうです。
3. あとは、ストリーミングの URL を叩く。
 → どうせだから、画像の部分だけを切り出してしまう。

これを考えると、

  • Windows プログラムにして WebBrowser を貼り付ける。
  • 貼り付けてある OBJECT タグを Yahoo!動画がから引っ張ってくる。

ということで出来そうです。

        // URLを指定する
        private void button1_Click(object sender, EventArgs e)
        {
            string url = textUrl.Text;

            // リストの「動画を見る」では、player.htmlに渡している。
            // これを、makeAsx.php に渡す方式に変換
            if (url.IndexOf("player.html") >= 0)
            {
                url = url.Replace("player.html", "makeAsx.php");
                url = url.Replace("spid", "spaceid");
                url += "&channel_no=0&ad_stream=1&product_type=1";

                textUrl.Text = url;
            }


            if ( url == "" ) {
                // サンプル用のURL
                url = "http://player.streaming.yahoo.co.jp/player/makeAsx.php?" + 
 "s_id=t&cp_id=00114&pg_id=v00630&co_id=v0063000000000325863&vw=3620&spaceid=2013007262&" +
 "channel_no=0&ad_stream=1&product_type=1";
            }
            this.webBrowser1.DocumentText = string.Format( m_html, url );
            this.TopMost = true;
        }

        // メニューの表示/非表示を切り替え
        private void buttonTitle_Click(object sender, EventArgs e)
        {
            if (buttonTitle.Tag == null )
            {
                // タイトルを隠す
                buttonTitle.Text = "表示";
                this.FormBorderStyle = FormBorderStyle.None;
                this.groupBox1.Visible = false;
                // 描画領域を設定して、ブラウザ部分だけを表示する
                GraphicsPath gp = new GraphicsPath();
                gp.AddRectangle(new Rectangle(
                    webBrowser1.Location, webBrowser1.Size));
                this.Region = new Region(gp);
                buttonTitle.Tag = true;
            }
            else
            {
                // タイトルを表示
                buttonTitle.Text = "隠す";
                this.FormBorderStyle = FormBorderStyle.Fixed3D;
                this.groupBox1.Visible = true;
                this.TransparencyKey = Color.Empty;
                this.Region = null;
                buttonTitle.Tag = null;
            }
        }

URLを引っ張ってくるのが結構面倒なのですが、Yahoo!動画の場合、メニュー部分(「動画を見る」ボタンが表示されているリスト)から、実際に動画を表示するページを割り出しています。

「動画を見る」のURLは、そのままではIEでソースを見ることができないので、一旦ファイルに保存するか、別途 WebBrowserコントロールを使って、ソースを抜き出します。

キャプチャ画面では、動画が見えませんが、実際は動画が表示されている状態です。これで Visual Studio が邪魔されずに(?)仕事ができます。

追記

おやすみオーバーレイ http://hp.vector.co.jp/authors/VA033596/ojos/001overlay.html#wmp8
に、オーバーレイを無効化してキャプチャする手段が載っていました。