ActiveXのコントロールって使いたくなることってありませんか?Vistaはまだ使ったことがないのですが、XPぐらいではまだまだActiveXやCOMは健在で、面白そうなライブラリがゴロゴロ転がっています。COMを.NETで使用する場合、[参照の追加]から[COM]タブを開き、目的のCOMを選べば勝手にラッパークラスを作ってくれて使用することができます。一方、ActiveX コントロールはどうかというと、当然.NETのControlクラスを継承しているはずがないので、単純に参照に追加するだけでは使えません。
では、どうするか?
実は.NET FrameworkツールにActiveX コントロール インポータ(Aximp)というのがあります。.NET便利っすねー。すんばらすぃ。ぃよっ、大将!(謎
使い方も簡単で、例えばWindows Media PlayerのActiveXコントロールのラッパークラスを作ろうとするときは
aximp c:\WINDOWS\system32\msdxm.ocx
とVS2005コマンドプロンプトに打ち込んでやれば、
MediaPlayer.dll
AxMediaPlayer.dll
の二つのラッパークラスライブラリができあがります。(aximpを実行したときにActiveXが見つからないと言われたら、regsvr32でActiveXをレジストリに登録しましょう。)MediaPlayer.dllは[参照の追加]でCOMを追加した際に作られるラッパークラスライブラリと同じものです。目的のActiveXコントロールラッパークラスライブラリはAxMediaPlayer.dllです。
AxMediaPlayerも出来上がったことですし、簡単なアプリを作ってみましょう。
アプリは設定ファイルに書かれているファイルパスからファイルを読み込んで、.NET Form上に設置されたWindowsMediaPlayerコントロールに映像を表示します。
コード
public partial class Form1 : Form
{
AxMediaPlayer.AxMediaPlayer player;
public Form1()
{
InitializeComponent();
player = new AxMediaPlayer.AxMediaPlayer();
((ISupportInitialize)player).BeginInit();
player.Dock = DockStyle.Fill;
((ISupportInitialize)player).EndInit();
this.Controls.Add(player);
this.Load += new EventHandler(Form1_Load);
}
void Form1_Load(object sender, EventArgs e)
{
player.FileName =
WindowsApplication27.Properties.Settings.Default.fileName;
player.Play();
}
}
これで完了。実行結果はこんな感じ
表示されている映像が見えていませんが、フォームにMediaPlayerのコントロールが表示されているのは分かりますね。(何故見えていないかは謎…フレームレートのせい?ブラウン管の映像を撮ってるわけじゃあるまいし…)
修正:ハードウェアクセラレータをオフにしたらコピペできるようになりました。実験のために無理やり起こされ、不機嫌ななうら助手が写っております。さんきゅー、ぽぴ王子
ActiveXのコントロールはそれこそ.NETのコントロール以上豊富なので、色々使って試したい方は是非aximpでガンガンインポートして使っちゃいましょう。
Reference
Windows フォーム ActiveX コントロール インポータ