月別: 2013年6月

コマンドラインでYouTubeの動画をダウンロードして音声ファイルに変換する

Ubuntu 11.10の手順

  1. apt-getでffmpegを入れる
  2. youtube-dlをダウンロードして適当なディレクトリに置く。ついでにファイル名をyoutube-dl.pyにしてchmod u+xした。
  3. 以下でダウンロードしてffmpegで64kbpsのogg vorbisに変換し、それっぽいファイル名を付けてくれる。
./youtube-dl.py -t --extract-audio --audio-format vorbis --audio-quality 64K YouTubeのURL

audio-formatはmp3とかも指定できるみたい。

.NETでフォームを最前面表示かつ他ウィンドウのフォーカスを奪わないで表示

Outlookみたいな通知画面を出したかった

Outlookあるじゃないですか、あれって新着メールが来たら画面の右下にぴよっとポップアップというか、じわーっと表示される画面を出せますよね。あんなのを出したかった。
最前面に表示される、だがしかし、表示させるときには他のウィンドウのフォーカスを奪わない。Wordで文書を書いているときにフォーカス奪われたらたまったもんじゃない。

TopMost + ShowWithoutActivationじゃダメ

FormにはTopMostというプロパティがあり、こいつをtrueにすれば最前面表示される。また、ShowWithoutActivationというプロパティをオーバーライドしてtrueを返すようにすると、表示する際にアクティブにならない(他ウィンドウのフォーカスを奪わない)ので、これを組み合せれば良いはず。

ところが、TopMostをtrueにすると必ずアクティブになるようで、使えない。

SetWindowPosする

上記問題はTopMostプロパティを使わずに、SetWindowPosを呼べば解決できます。例えば、C#なら以下のメソッドを呼べばOK。

       private void SetTopMost()
       {
           const int HWND_TOPMOST = -1;
           const uint SWP_NOSIZE = 0x0001;
           const uint SWP_NOMOVE = 0x0002;
           const uint SWP_NOACTIVATE = 0x0010;
           const uint SWP_SHOWWINDOW = 0x0040;
           const uint SWP_NOSENDCHANGING = 0x0400;
            // SetWindowPosはどこかでDllImportする
           SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_SHOWWINDOW);
       }

で、ShowWithoutActivation?をオーバーライドしtrueを返せば、所望の表示が可能。

参考サイト

参考というより、パクリ元と書くべきだな。