VisualStudio.NETにあるMicrosoft Web Browserコントロール(AxWebBrowser)のセキュリティ関係を調整する方法です。
ちなみに、Microsoft Web Browserコントロールはshdocvw.dll(ActiveXコントロール)をラップしているだけです。
なので、AxWebBrowserの細かい制御はCOMを使う必要があります。
以下で使うCOMのインターフェースやら#defineやらをC#で使えるようにしたソースです。
長いのでファイルを置いておきます。
COM.cs
まずは、VisualStudio.NETでFormを作って、そのFormにMicrosoft Web Browserコントロールを貼り付けてください。 あとは、以下のようにインターフェースを継承するようにして、中身を実装してください。
|
まずはFormにIServiceProviderとIInternetSecurityManagerを実装するように、これらを継承元として追加します。
もちろん、Formに実装しなくてはいけないわけではないので別クラスにわけても構いません。
ここでちょっと注意。
IServiceProvider.QueryServiceメソッドは、ほんとうなら
|
としたいんです。
けど、3番目の引数がobjectだとどうしてもうまく動きませんでした。
そこで、仕方ないので3番目の引数の型をIInternetSecurityManagerにしたIServiceProviderForIInternetSecurityManagerも定義しています(COM.cs参照)。
そして、FormにはIServiceProviderではなく、IServiceProviderForIInternetSecurityManagerのほうを継承元としています。
(QueryInterfaceしてくれるんならobjectでも良さそうなものだけど、それだとどうしてもIInternetSecurityManagerだと認識してくれなかった)
続いて、Form_LoadイベントでIServiceProviderをFormに問い合わせにくるように登録してやります。
あとは、IServiceProviderForIInternetSecurityManagerとIInternetSecurityManagerを実装するだけです。
IServiceProviderForIInternetSecurityManagerにはQueryServiceメソッドしかありませんし、中身も上記のまんまで十分でしょう。
IInternetSecurityManagerにはいろいろとメソッドがありますが、重要なのはMapUrlToZoneとProcessUrlActionの各メソッドでしょう。
MapUrlToZoneメソッドでは、URLがどのゾーンなのかを返してやります。URLZONE列挙体はCOM.csに入ってます。
ProcessUrlActionメソッドでは、各Actionを許可するか拒否するかを返します。Actionは "URLACTION_" で始まるint値です。これも一通りCOM.csに入ってます。
許可するかどうかはpPolicyにURLPOLICY_ALLOW、URLPOLICY_DISALLOWのいずれかをセットしてやります。
URLPOLICY_QUERYとかもありますが、どういう挙動になるのかは試してません。
ちなみに、これらの値はurlmon.hからコピーしてきてC#の文法にあわせただけです(コメントとかもそのまんま)。