博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#设置IE代理
阅读量:6984 次
发布时间:2019-06-27

本文共 6722 字,大约阅读时间需要 22 分钟。

public class IEProxySetting    {        public static bool UnsetProxy()        {            return SetProxy(null, null);        }        public static bool SetProxy(string strProxy)        {            return SetProxy(strProxy, null);        }        public static bool SetProxy(string strProxy, string exceptions)        {            InternetPerConnOptionList list = new InternetPerConnOptionList();            int optionCount = string.IsNullOrEmpty(strProxy) ? 1 : (string.IsNullOrEmpty(exceptions) ? 2 : 3);            InternetConnectionOption[] options = new InternetConnectionOption[optionCount];            // USE a proxy server ...            options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;            options[0].m_Value.m_Int = (int)((optionCount < 2) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));            // use THIS proxy server            if (optionCount > 1)            {                options[1].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;                options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(strProxy);                // except for these addresses ...                if (optionCount > 2)                {                    options[2].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS;                    options[2].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(exceptions);                }            }            // default stuff            list.dwSize = Marshal.SizeOf(list);            list.szConnection = IntPtr.Zero;            list.dwOptionCount = options.Length;            list.dwOptionError = 0;            int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));            // make a pointer out of all that ...            IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);            // copy the array over into that spot in memory ...            for (int i = 0; i < options.Length; ++i)            {                IntPtr opt = new IntPtr(optionsPtr.ToInt32() + (i * optSize));                Marshal.StructureToPtr(options[i], opt, false);            }            list.options = optionsPtr;            // and then make a pointer out of the whole list            IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((Int32)list.dwSize);            Marshal.StructureToPtr(list, ipcoListPtr, false);            // and finally, call the API method!            int returnvalue = NativeMethods.InternetSetOption(IntPtr.Zero,               InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,               ipcoListPtr, list.dwSize) ? -1 : 0;            if (returnvalue == 0)            {  // get the error codes, they might be helpful                returnvalue = Marshal.GetLastWin32Error();            }            // FREE the data ASAP            Marshal.FreeCoTaskMem(optionsPtr);            Marshal.FreeCoTaskMem(ipcoListPtr);            if (returnvalue > 0)            {  // throw the error codes, they might be helpful                throw new Win32Exception(Marshal.GetLastWin32Error());            }            return (returnvalue < 0);        }        ///         /// 获取正在使用的代理        ///         /// 
public static string GetProxyServer() { //打开注册表 RegistryKey regKey = Registry.CurrentUser; string SubKeyPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"; //更改健值,设置代理 RegistryKey optionKey = regKey.OpenSubKey(SubKeyPath, true); //是否启用 1 启用 int actualProxyStatus = Convert.ToInt32(optionKey.GetValue("ProxyEnable")); string actualProxy = string.Empty; if (actualProxyStatus == 1) { actualProxy = optionKey.GetValue("ProxyServer").ToString(); } regKey.Close(); return actualProxy; } } #region WinInet structures [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct InternetPerConnOptionList { public int dwSize; // size of the INTERNET_PER_CONN_OPTION_LIST struct public IntPtr szConnection; // connection name to set/query options public int dwOptionCount; // number of options to set/query public int dwOptionError; // on error, which option failed //[MarshalAs(UnmanagedType.)] public IntPtr options; }; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct InternetConnectionOption { static readonly int Size; public PerConnOption m_Option; public InternetConnectionOptionValue m_Value; static InternetConnectionOption() { InternetConnectionOption.Size = Marshal.SizeOf(typeof(InternetConnectionOption)); } // Nested Types [StructLayout(LayoutKind.Explicit)] public struct InternetConnectionOptionValue { // Fields [FieldOffset(0)] public System.Runtime.InteropServices.ComTypes.FILETIME m_FileTime; [FieldOffset(0)] public int m_Int; [FieldOffset(0)] public IntPtr m_StringPtr; } } #endregion #region WinInet enums // // options manifests for Internet{Query|Set}Option // public enum InternetOption : uint { INTERNET_OPTION_PER_CONNECTION_OPTION = 75 } // // Options used in INTERNET_PER_CONN_OPTON struct // public enum PerConnOption { INTERNET_PER_CONN_FLAGS = 1, // Sets or retrieves the connection type. The Value member will contain one or more of the values from PerConnFlags INTERNET_PER_CONN_PROXY_SERVER = 2, // Sets or retrieves a string containing the proxy servers. INTERNET_PER_CONN_PROXY_BYPASS = 3, // Sets or retrieves a string containing the URLs that do not use the proxy server. INTERNET_PER_CONN_AUTOCONFIG_URL = 4//, // Sets or retrieves a string containing the URL to the automatic configuration script. } // // PER_CONN_FLAGS // [Flags] public enum PerConnFlags { PROXY_TYPE_DIRECT = 0x00000001, // direct to net PROXY_TYPE_PROXY = 0x00000002, // via named proxy PROXY_TYPE_AUTO_PROXY_URL = 0x00000004, // autoproxy URL PROXY_TYPE_AUTO_DETECT = 0x00000008 // use autoproxy detection } #endregion internal static class NativeMethods { [DllImport("WinInet.dll", SetLastError = true, CharSet = CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool InternetSetOption(IntPtr hInternet, InternetOption dwOption, IntPtr lpBuffer, int dwBufferLength); }

 

转载于:https://www.cnblogs.com/XuPengLB/p/9412171.html

你可能感兴趣的文章
磁盘格式化
查看>>
Fedora 11 安装指南-12
查看>>
eclipse的安卓开发插件『ADT』在线安装不成功的解决方案
查看>>
刷屏的海底捞超级APP究竟是怎样与阿里云合作的
查看>>
k8s学习笔记之三:k8s快速入门
查看>>
SpringBoot慕课学习-SpringBoot开发常用技术整合
查看>>
C10K问题
查看>>
慕课网3-13编程练习:采用flex弹性布局制作页面主导航
查看>>
线程中死锁的demo
查看>>
canvas-7globleCompositeOperation.html
查看>>
英语发音规则---H字母
查看>>
UESTC 2014 Summer Training #11 Div.2
查看>>
1035. 插入与归并(25)
查看>>
Android组件化和插件化开发
查看>>
【java】 虹软ArcFace 2.0 人脸信息识别(年龄、性别)
查看>>
Java集合--Map总结
查看>>
【转】Netty系列之Netty 服务端创建
查看>>
alpha冲刺9
查看>>
spring学习之spring 插件 for eclipse
查看>>
dispaly、position、float之间的关系与相互作用
查看>>