OSDN Git Service

プロキシ設定の復旧で必ず自動構成ファイルを無効にするのをやめる
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 12 Sep 2015 15:12:58 +0000 (00:12 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 18 Sep 2015 14:37:23 +0000 (23:37 +0900)
KancolleSniffer/SystemProxy.cs

index d72476a..7d39dba 100644 (file)
@@ -27,6 +27,7 @@ namespace KancolleSniffer
     public class SystemProxy\r
     {\r
         private InternetPerConnOptionList orgList;\r
+        private string _currentUrl;\r
 \r
         private void SaveSettings()\r
         {\r
@@ -57,6 +58,7 @@ namespace KancolleSniffer
             SaveSettings();\r
             var flagValue = new InternetPerConnOptionValue {dwValue = (int)PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL};\r
             var urlValue = new InternetPerConnOptionValue {pszValue = Marshal.StringToHGlobalAuto(url)};\r
+            _currentUrl = url;\r
             var opts = new[]\r
             {\r
                 new InternetPerConnOption {dwOption = PerConnOption.INTERNET_PER_CONN_FLAGS, Value = flagValue},\r
@@ -84,11 +86,18 @@ namespace KancolleSniffer
         {\r
             if (orgList.dwSize == 0)\r
                 return;\r
-            // Always unselect the Use automatic configuration script check box.\r
-            var flagsOpt =\r
-                (InternetPerConnOption)Marshal.PtrToStructure(orgList.pOptions, typeof(InternetPerConnOption));\r
-            flagsOpt.Value.dwValue &= ~(int)PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL;\r
-            Marshal.StructureToPtr(flagsOpt, orgList.pOptions, false);\r
+            var size = Marshal.SizeOf(typeof(InternetPerConnOption));\r
+            var urlOpt = (InternetPerConnOption)\r
+                Marshal.PtrToStructure((IntPtr)((long)orgList.pOptions + size), typeof(InternetPerConnOption));\r
+            var orgUrl = Marshal.PtrToStringAuto(urlOpt.Value.pszValue);\r
+            if (orgUrl == _currentUrl) // The restoration was sikipped or failed at last time.\r
+            {\r
+                // Unselect the Use automatic configration script check box.\r
+                var flagsOpt =\r
+                    (InternetPerConnOption)Marshal.PtrToStructure(orgList.pOptions, typeof(InternetPerConnOption));\r
+                flagsOpt.Value.dwValue &= ~(int)PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL;\r
+                Marshal.StructureToPtr(flagsOpt, orgList.pOptions, false);\r
+            }\r
             var listSize = orgList.dwSize;\r
             var listBuff = Marshal.AllocCoTaskMem(listSize);\r
             Marshal.StructureToPtr(orgList, listBuff, false);\r
@@ -96,9 +105,6 @@ namespace KancolleSniffer
             Refresh();\r
 \r
             Marshal.FreeCoTaskMem(listBuff);\r
-            var size = Marshal.SizeOf(typeof(InternetPerConnOption));\r
-            var urlOpt = (InternetPerConnOption)\r
-                Marshal.PtrToStructure((IntPtr)((long)orgList.pOptions + size), typeof(InternetPerConnOption));\r
             Marshal.FreeHGlobal(urlOpt.Value.pszValue);\r
             Marshal.FreeCoTaskMem(orgList.pOptions);\r
             orgList.dwSize = 0;\r