C#とかでWindowsアプリを作っていて、IEコンポーネントを使えば、簡単にブラウザソフトを作ることは可能です。
ですが、普通に作るのみだと、ユーザエージェントがIEのものと全く同じため、サーバ側で判別できなくて、ちょっと不便なことがあります。
そこで、IEコンポーネントを使いつつ、UserAgentを書き換える方法です。
urlmon.dllにある、UrlMkSetSessionOptionというAPIを使えば、UserAgentを簡単に変更可能です。
また、既存のUserAgentの後ろに文字列を付け加える場合は、
urlmon.dllにある、UrlMkGetSessionOption にて既存のUserAgentを取得した後にUrlMkSetSessionOptionを呼び出すだけでOKです。
※ 一度Navigateにてブラウザを起動してしまうと、UserAgentの変更はいったんアプリを終了しないと出来ないようです。
作ったテスト用アプリのソースは以下の感じです。
--------サンプルソースC#(インデントが付けられないみたいです・・・orz)--------
using System.Runtime.InteropServices;
public partial class Form1 : Form
{
[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 Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
const int URLMON_OPTION_USERAGENT = 0x10000001;
string ua = "";
//完全にUserAgentを書き換えるか、元のUserAgentに文字を付け加えるか
if (this.ckBoxUaAdd.Checked)
{
//元のUserAgentを取得する。
StringBuilder userAgent = new StringBuilder(255);
int returnLength = 0;
int result = UrlMkGetSessionOption(URLMON_OPTION_USERAGENT, userAgent, userAgent.Capacity, ref returnLength, 0);
//取得したUserAgentに文字を付け加える
ua = userAgent.ToString() + this.txtUserAgent.Text;
}
else
{
ua = this.txtUserAgent.Text;
}
UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);
this.webBrowser1.Navigate(this.txtURL.Text);
}
}

5