{"id":1059,"date":"2011-11-30T01:12:13","date_gmt":"2011-11-29T16:12:13","guid":{"rendered":"http:\/\/agrimo.jp\/wp\/?page_id=1059"},"modified":"2015-05-12T11:12:51","modified_gmt":"2015-05-12T02:12:51","slug":"c-webbrowser-newwindow2-%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b9","status":"publish","type":"page","link":"https:\/\/agrimo.jp\/wp\/?page_id=1059","title":{"rendered":"c# webBrowser.NewWindow2 \u306e\u4f5c\u308a\u65b9"},"content":{"rendered":"<p>\u591a\u5206\u3001\u540c\u3058\u3088\u3046\u306a\u3053\u3068\u3067\u60a9\u3093\u3067\u3044\u308b\u65b9\u304c\u591a\u3044\u3053\u3068\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>webBrowser\u3092\u5229\u7528\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u3044\u3066\u3044\u308b\u3068\u3001\u30ea\u30f3\u30af\u306a\u3069\u3092\u30af\u30ea\u30c3\u30af\u3057\u5225\u30a6\u30a4\u30f3\u30c9\u30a6\u304c\u958b\u304b\u308c\u308b\u3088\u3046\u306a\u5834\u5408\u3001IE\u304c\u8d77\u52d5\u3057\u3066\u3057\u307e\u3044\u3001\u30af\u30c3\u30ad\u30fc\u306e\u9023\u643a\u304c\u7d76\u305f\u308c\u3066\u3057\u307e\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u3088\u3046\u306a\u5834\u5408\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3057\u3066\u304a\u304f\u3053\u3068\u306b\u3088\u308a\u3001IE\u3092\u958b\u304b\u305a\u306b\u81ea\u8eab\u304c\u4f5c\u6210\u3057\u305fwebBrowser\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\uff08\u203b\u30bd\u30fc\u30b9\u306f\u3059\u3079\u3066\u4ed6\u304b\u3089\u306e\u30b3\u30d4\u30fc\u3092\u8a18\u8f09\u3057\u3066\u3044\u307e\u3059\u3002\u5927\u5909\u3001\u4fbf\u5229\u306a\u3082\u306e\u3092\u4f5c\u3089\u308c\u308b\u65b9\u304c\u3044\u308b\u3082\u306e\u3067\u3059\u3002\uff09<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u25c6\u5229\u7528\u624b\u9806\u25c6<\/strong><\/p>\n<p>\uff11\uff0eC#\u3067\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\uff08Windows\u30d5\u30a9\u30fc\u30e0\uff09\u3092\u4f5c\u6210\u3059\u308b\u3002<\/p>\n<p>\uff12\uff0e\u30af\u30e9\u30b9\u306e\u8ffd\u52a0\u3092\u3059\u308b\u3002\uff08\u4e2d\u8eab\u306f\u3001\u4ee5\u4e0b\u8a18\u8f09\u306e\u30bd\u30fc\u30b9 <strong><em><span style=\"color: #ff0000;\">[WebBrowserEx.cs]<\/span><\/em><\/strong> \u3068\u5165\u308c\u66ff\u3048\u308b\u3002\uff09<\/p>\n<p>\uff13\uff0e\u30c4\u30fc\u30eb\u30dc\u30c3\u30af\u30b9\u306b WebBrowserEx \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u8ffd\u52a0\u3055\u308c\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u3002\uff08\u8ffd\u52a0\u3055\u308c\u306a\u3044\u5834\u5408\u306f\u3001\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u30ea\u30d3\u30eb\u30c9\u3059\u308b\u3002\uff09<\/p>\n<p>\uff14\uff0eForm1.cs \u3092\u30b3\u30fc\u30c9\u8868\u793a\u3057\u3001\u4ee5\u4e0b\u63b2\u8f09\u306e\u30bd\u30fc\u30b9 <strong><em><span style=\"color: #ff0000;\">[Form1.cs] <\/span><\/em><\/strong>\u306e\u5185\u5bb9\u3092\u8ffd\u8a18\u3059\u308b\u3002<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\"><strong><em>[WebBrowserEx.cs]<\/em><\/strong><\/span><\/p>\n<pre title=\"WebBrowserEx.cs\" class=\"lang:c# decode:true \">using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Windows.Forms;\r\nusing System.ComponentModel;\r\nusing System.Runtime.InteropServices;\r\nusing System.Security.Permissions;\r\n\r\nnamespace WebBrowserExTest\r\n{\r\n    public class WebBrowserEx : WebBrowser\r\n    {\r\n\r\n        #region NewWindow2 \u30a4\u30d9\u30f3\u30c8\u95a2\u9023\r\n\r\n        private AxHost.ConnectionPointCookie cookie;\r\n        private WebBrowser2EventHelper helper;\r\n\r\n        [DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]\r\n        [DispIdAttribute(200)]\r\n        public object Application\r\n        {\r\n            get\r\n            {\r\n                if (this.ActiveXInstance == null)\r\n                {\r\n                    throw new AxHost.InvalidActiveXStateException(\"Application\", AxHost.ActiveXInvokeKind.PropertyGet);\r\n                }\r\n                return (this.ActiveXInstance as IWebBrowser2).Application;\r\n            }\r\n        }\r\n\r\n        [DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]\r\n        [DispIdAttribute(552)]\r\n        public bool RegisterAsBrowser\r\n        {\r\n            get\r\n            {\r\n                if (this.ActiveXInstance == null)\r\n                {\r\n                    throw new AxHost.InvalidActiveXStateException(\"RegisterAsBrowser\", AxHost.ActiveXInvokeKind.PropertyGet);\r\n                }\r\n                return (this.ActiveXInstance as IWebBrowser2).RegisterAsBrowser;\r\n            }\r\n            set\r\n            {\r\n                if (this.ActiveXInstance == null)\r\n                {\r\n                    throw new AxHost.InvalidActiveXStateException(\"RegisterAsBrowser\", AxHost.ActiveXInvokeKind.PropertyGet);\r\n                }\r\n                (this.ActiveXInstance as IWebBrowser2).RegisterAsBrowser = value;\r\n            }\r\n        }\r\n\r\n        [PermissionSetAttribute(SecurityAction.LinkDemand, Name = \"FullTrust\")]\r\n        protected override void CreateSink()\r\n        {\r\n            base.CreateSink();\r\n            helper = new WebBrowser2EventHelper(this);\r\n            cookie = new AxHost.ConnectionPointCookie(this.ActiveXInstance, helper, typeof(DWebBrowserEvents2));\r\n        }\r\n\r\n        [PermissionSetAttribute(SecurityAction.LinkDemand, Name = \"FullTrust\")]\r\n        protected override void DetachSink()\r\n        {\r\n            if (cookie != null)\r\n            {\r\n                cookie.Disconnect();\r\n                cookie = null;\r\n            }\r\n            base.DetachSink();\r\n        }\r\n\r\n        public event WebBrowserNewWindow2EventHandler NewWindow2 = (o, e) =&gt; { };\r\n\r\n        protected virtual void OnNewWindow2(WebBrowserNewWindow2EventArgs e)\r\n        {\r\n            NewWindow2(this, e);\r\n        }\r\n\r\n        private class WebBrowser2EventHelper : StandardOleMarshalObject, DWebBrowserEvents2\r\n        {\r\n            private WebBrowserEx parent;\r\n\r\n            public WebBrowser2EventHelper(WebBrowserEx parent)\r\n            {\r\n                this.parent = parent;\r\n            }\r\n\r\n            public void NewWindow2(ref object ppDisp, ref bool cancel)\r\n            {\r\n                var e = new WebBrowserNewWindow2EventArgs(ppDisp);\r\n                this.parent.OnNewWindow2(e);\r\n                ppDisp = e.ppDisp;\r\n                cancel = e.Cancel;\r\n            }\r\n\r\n        }\r\n        #endregion\r\n    }\r\n\r\n    public delegate void WebBrowserNewWindow2EventHandler(object sender, WebBrowserNewWindow2EventArgs e);\r\n\r\n    public class WebBrowserNewWindow2EventArgs : CancelEventArgs\r\n    {\r\n        public object ppDisp { get; set; }\r\n\r\n        public WebBrowserNewWindow2EventArgs(object ppDisp)\r\n        {\r\n            this.ppDisp = ppDisp;\r\n        }\r\n    }\r\n\r\n    [ComImport, Guid(\"34A715A0-6587-11D0-924A-0020AFC7AC4D\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]\r\n    [TypeLibType(TypeLibTypeFlags.FHidden)]\r\n    public interface DWebBrowserEvents2\r\n    {\r\n        [DispId(251)]\r\n        void NewWindow2(\r\n        [InAttribute(), OutAttribute(), MarshalAs(UnmanagedType.IDispatch)] ref object ppDisp,\r\n        [InAttribute(), OutAttribute()] ref bool cancel);\r\n    }\r\n\r\n    [ComImport, Guid(\"D30C1661-CDAF-11D0-8A3E-00C04FC9E26E\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]\r\n    public interface IWebBrowser2\r\n    {\r\n        object Application { get; }\r\n        bool RegisterAsBrowser { get; set; }\r\n    }\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\"><strong><em>[Form1.cs]<\/em><\/strong><\/span><\/p>\n<pre title=\"Form1.cs\" class=\"lang:c# decode:true \">using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Data;\r\nusing System.Drawing;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Windows.Forms;\r\nusing WebBrowserExTest;\r\n\r\nnamespace WindowsFormsApplication1\r\n{\r\n    public partial class Form1 : Form\r\n    {\r\n        TabControl TabControl1 = new TabControl();\r\n        WebBrowserEx WebBrowser1;\r\n        TabPage TabPage1;\r\n\r\n        public Form1()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n\r\n        private void webBrowserEx1_NewWindow2(object sender, ReinsKensaku2011.WebBrowserNewWindow2EventArgs e)\r\n        {\r\n            \/\/WebBrowser1\r\n            this.WebBrowser1 = new WebBrowserEx();\r\n            this.WebBrowser1.Dock = DockStyle.Fill;\r\n            WebBrowser1.NewWindow2 += webBrowserEx1_NewWindow2;\r\n            \/\/TabPage1\r\n            this.TabPage1 = new TabPage();\r\n            this.TabPage1.Controls.Add(WebBrowser1);\r\n            \/\/TabControl\r\n            this.TabControl1.Controls.Add(TabPage1);\r\n            this.TabControl1.SelectedTab = TabPage1;\r\n            \/\/\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u304c\u958b\u304f\u306e\u3092\u6291\u5236\r\n            e.ppDisp = this.WebBrowser1.Application;\r\n            this.WebBrowser1.RegisterAsBrowser = true;\r\n        }\r\n\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            \/\/WebBrowser1\r\n            this.WebBrowser1 = new WebBrowserEx();\r\n            this.WebBrowser1.Dock = DockStyle.Fill;\r\n            WebBrowser1.NewWindow2 += webBrowserEx1_NewWindow2;\r\n            \/\/TabPage1\r\n            this.TabPage1 = new TabPage();\r\n            this.TabPage1.Controls.Add(WebBrowser1);\r\n            \/\/TabControl\r\n            this.TabControl1.Dock = DockStyle.Fill;\r\n            this.TabControl1.TabPages.Add(TabPage1);\r\n            \/\/Form1\r\n            this.Text = \"WebBrowserNewWindow2Event\";\r\n            this.Controls.Add(this.TabControl1);\r\n            \/\/\r\n            this.WebBrowser1.GoHome();\r\n\r\n        }\r\n\r\n    }\r\n\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u591a\u5206\u3001\u540c\u3058\u3088\u3046\u306a\u3053\u3068\u3067\u60a9\u3093\u3067\u3044\u308b\u65b9\u304c\u591a\u3044\u3053\u3068\u3068\u601d\u3044\u307e\u3059\u3002 webBrowser\u3092\u5229\u7528\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u3044\u3066\u3044\u308b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":842,"menu_order":50,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1059","page","type-page","status-publish","hentry"],"wppr_data":[],"_links":{"self":[{"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/pages\/1059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1059"}],"version-history":[{"count":31,"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/pages\/1059\/revisions"}],"predecessor-version":[{"id":7831,"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/pages\/1059\/revisions\/7831"}],"up":[{"embeddable":true,"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/pages\/842"}],"wp:attachment":[{"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}