Yahoo!動画を最前面にして表示する
最近 GyaO や Yahoo!動画をよく見るのですが、全画面で表示していると、仕事ができない、、、というか、仕事中に TV を見るな、とも言えますが、まあ、そのあたりは脇に置いて、、、エディタやら Visual Studio やらを使いながら、動画も眺めてみたいわけです。
そうすると考えられるのは、
1. IE をトップ画面にする
→ すると、常に前面に出てくるので、他のアプリの邪魔をしない。
2. 広告やらメニューの部分はいらないから、最小で表示する。
→ ウィンドウのタイトルバーを無しにすればいけそうです。
3. あとは、ストリーミングの URL を叩く。
→ どうせだから、画像の部分だけを切り出してしまう。
これを考えると、
ということで出来そうです。
// 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
に、オーバーレイを無効化してキャプチャする手段が載っていました。
不定形フォームを作る
でもって、最初は単純なところから、不定形フォームを作ります。VC++6.0の頃は、Regionを作って苦労したわけですが、.NETの場合は、Form クラスの TransparencyKey プロパティに透明色を指定するだけで完了です。
this.panel1.Visible = false; // ビットマップを作成 Bitmap bmp = new Bitmap(this.panel1.BackgroundImage); // 左上の点を透明色にする Color col = bmp.GetPixel(0, 0); // フォームの背景を変える this.BackgroundImage = bmp; this.BackgroundImageLayout = ImageLayout.None; // リサイズ this.Size = bmp.Size; // 透明色を設定する this.TransparencyKey = col;
要は、フォームの背景(BackgroundImage)に、画像を設定して、その画像の透明色(この場合は、左上の点を透明色と決めています)とフォームの色とを一緒にすればOK。
こうすることで、画像に合わせた不定形のフォームが簡単にできます。不定形フォームというと、円型とか星型(自分もやるけど)が多いのですが、背景の絵にあわせるならば、あらかじめ画像を用意してやるほうが簡単になります。
ちなみに、変形フォームを作ると、タイトルバーがなくなるのでフォームの移動ができなくなります。これは、マウスダウン&アップを独自に取る必要があります。このあたりは、明日、続きを書きます。
カテゴリを決める
この日記の目的として、単純なTipsでは面白くないので、ちょっとディープなものを集めていきます。これは、私自身の技術向上&保持でもあるし、そういう情報を手元に広げておけば、.NET Frameworkの不思議な部分(ドキュメントには書いてあるものの、どう使ったらいいのか分からない、あるいは、何かを作ろうと思ったけど、本当に .NET&Windowsでいけるのかどうか分からない)を、あらかじめ回避しておこうかな、という趣旨になります。
という訳で、.NETのクラスライブラリのカテゴリとしては、
- GDI+(画像関係)
- 暗号化
- 証明書
- .NET リモート
- サービス
- IEコンポーネント(WebBrowser)
あたりを中心に紹介&調査していきます。
この他のものは、だいたい、書籍やWebで調べられるので、ちょっと難しめ&それなりに役に立ちそう、な分野を狙います。
エンジニアマインド vol.2
- 作者: エンジニアマインド編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2006/12/15
- メディア: 大型本
- 購入: 1人 クリック: 4回
- この商品を含むブログ (10件) を見る
技術トピックは、はてなに移動することに決定。
正式には、2007年から稼動することにします。
その前哨戦として、当方の記事の紹介(つーか宣伝)。
「エンジニアマインド vol.2」(技術評論社)に、「賢い開発プロセスの選び方」という特集(30頁)を書いています。巷のアジャイル開発を網羅、ウォータフォールやCCPM(クリティカル・チェーン)の話もちらほら。原稿料は受領済みなので、立ち読みでもOKよw
というわけで、はてなには、.NET関係の技術情報を載せていくことにします。
mymy-mycompany分室(http://mycom.jugem.jp/)は、非技術ネタ(思考とか発想とか)を中心に。