2013/01/23(水)ブラウザコンポーネント(VS付属とWebKit)

とある事情で数日前から専用ブラウザを製作し始めました。
VisualStudio2005のC#にて開発。
最近はソフト設計だとC#が便利すぎてこればっかり使ってます。昔VC++を使っていたころに比べてソフトに拘る事がなくなったのでコンポーネント豊富でさくっと作れるC#はすばらしいと思っています。

それで、今回もさくっとC#のブラウザコンポーネントを使って製作…が2点問題が発生しました。
  • UserAgantを自由に変更できないこと
  • モバイルサイトでは表示が乱れてしまうこと
この2点は非常に痛い。というか、これが出来なきゃ意味がない。さっそくWebで調べたところUserAgantは簡単に書き換えられることが分かりました。
へっぽこSE奮闘記
このサイトの方法を真似させてもらい早速実行、すばらしい、ちゃんとできております。
C# ソースコードの
using System.Windows.Forms;
の次に
using System.Runtime.InteropServices;
を追加。

public partial class Form_Main : Form
    {
のすぐ下に
        User-Agant書き換えのため(IEコンポーネント版)
        [DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
          private static extern int UrlMkSetSessionOption(int dwOption, string str, int nLength, int dwReserved);
        [DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
        private static extern int UrlMkGetSessionOption(int dwOption, StringBuilder pBuffer, int dwBufferLength, ref int pdwBufferLength, int dwReserved);
を追加。最後に、

        public Form_Main()
        {
            InitializeComponent();
のすぐ下に、
            const int URLMON_OPTION_USERAGENT = 0x10000001;
            String ua = "好きなUserAgent名";
            UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);
たったこれだけであとは、好きなようにWebBrowserコンポーネントを使うだけ。しかし、さすがIEコンポーネントです。表示が乱れまくっております(笑) それで、この日はとりあえずこのままにしてました。翌日考えていて「同じ事で悩んでいる人いそうだし、なによりGoogle Chromeだと表示が乱れないんだよな…。C#用のライブラリとかもイマドキならあるのでは?」と思って調べることにしました。そしたら見事的中、フリーで配布されているではないですか、しかも扱いがC#付属と殆ど変わらない様子。早速このライブラリ WebKit.NET というものを試すことに。結論から言うとすぐに導入できて快適です、表示も乱れません。文句なしで専用ブラウザ製作についての懸念が吹っ飛びました。但し導入に当たって一つ悩んだことがあったので記します。
まず、導入の参考にさせてもらったamongの雑記では、全く問題なくBlogに書かれている通りにすればバッチリでした。しかし、自分の開発環境が特殊なのかコンパイルが通りません。
  • BadImageFormatException うんぬんかんぬん…。
とInitializeComponent();の部分でエラーとなります。そこで、調べたところどうやら64-bit環境での開発をする場合のエラーみたいです。
英語サイトですが、Filip Norrgård’s blog @ filips.net
に「プロジェクト」-「プロパティ」の【ビルド】→【全般】→【プラットホームターゲット】を「x86」にしろと書いてあったのでそれを試す。結果、ビンゴでした。

先人のWeb知識便りですが、すぐに形にできました。逃げ口実かも知れませんが目的は専用ブラウザです。取れる情報は最大限に使ってさっさと完成させたいと思ってます。(私的な事情ですが…)