お米 is ライス

C#やらUnityやらを勉強していて、これはメモっといたほうがええやろ、ということを書くつもりです

DMMの犬になる

今日の出来事

今日は本を一冊読んで、ちょっと寝てから艦これE2を攻略していた。
艦これのイベントは昨日(金曜日)からだったのだが、最近始めた「御城プロジェクト」でもおととい(木曜日)からイベントが始まっていた。

今日はすっかり城プロの存在を忘れていたのであれなのだが、最近は基本的に艦これと城プロを同時に起動して並行してデイリーとかをやってたりする。

そこで初め、艦これは専ブラ、城プロはFireFoxでやろうと考えたのだが、どうやらDMMに一つのアカウントでログインできるのは一つのブラウザだけらしく、両方開いているとそのうちどちらかが通信エラーを吐いてしまって、これは困った、と思った。
専ブラは当然便利なので、ぜひとも使いたいわけだが城プロと並行してできないのであれば仕方なく、泣く泣くどっちもFireFoxでやることにした。

しかしやっぱり普通のブラウザでやっていると不便なので専ブラを使いたい。そこで少し考えると、艦これと城プロを同時にできる専ブラがあればいいじゃないか!!と気が付いたわけである。
かくして、春休み中にやるべきことが一つ増えてしまったのである。

専ブラ作ろうとしてる

というわけでまずは Visual Studio を開いて、WebBrowserを複数開けるFormを適当に作ってとりあえずログインしてみるかぁとおもって普通に手動でログインした。
すると艦これは何事もなくプレイできるのだが、城プロが起動してくれない。どうやらWebBrowserコントロールで使っているIEのバージョンが古いらしい。

そこでグーグル先生に聞いてみると、WebBrowserで使うIEのバージョンはレジストリをいじれば無理矢理変えることができるみたいで、その方法を試してみたのだが、やっぱり城プロは起動してくれない。
しばらくその方法を試してみたけどどうにもこうにもなので、ほかの方法はないのかしらとまたグーグル先生に聞いてみると、どうもUserAgentを偽装すればいい、ということが分かった。
Webなんかしたことない自分からすると、何かを偽装するなんて背徳感が半端ないわけであるが、DMM様のためである。多少の悪事には手を染めてしまおう、と自分に言い聞かせた。

UserAgentを偽装するためには「urlmon.dll」というDLLが必要らしい。
実はすでにWindowsのSystemフォルダに入ってあるみたいで、それを何も考えずに参照に追加しようとしたのだが、アクセスの許可がないとか言われて参照できなかった。

そこで参考にしたサイトに書いてあった通り、

[DllImport("urlmon.dll", CharSet=CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(int dwOption, string str, int nLength, int dwReserved);

こんな風にインポートしたらインポートできた。

それから今から使う定数として、

const int URLMON_OPTION_USERAGENT = 0x10000001;
const string UserAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko";

二つ用意しておく。

それからWebBrowserを初期化するときとかに

UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, UserAgent, UserAgent.Length, 0);

こんな関数を呼び出しておけば万事解決で、これで城プロは無事起動できるようになりましたとさ

それから

そして今何をやっているかというと、どうやってAPIを覗くのか、とか調べてます。
なんか艦これと城プロで流れてくるファイルの形式が違うっぽくて、めんどくさそうだなぁって感じになってる。