`
passer_by
  • 浏览: 33197 次
社区版块
存档分类
最新评论

java修改IE(chrome同)代理服务器配置---通过直接修改注册表

 
阅读更多
原创文章,转载请注明出处:http://passerbyy.iteye.com/blog/1285664 作者:passer_by

因为本文的操作,都是关于修改注册表的,所以希望能够谨慎操作。

方法有两种:
(一)通过自动生成注册表文件,再调用reg.exe命令
在说明本文之前,首先说明有比较简单的方法,java程序自动生成注册表文件*.reg,格式为:
REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"ProxyEnable"=dword:00000001
"ProxyServer"="localhost:8080"
"ProxyOverride"="<localhost>"

然后调用,Runtime.getRuntime().exec( "reg.exe   import " + filename);

(二)通过调用registry的api修改
既然目前已经有现成的修改注册表的包jni的registry包,那我们就不费这个事做上面的操作了,registry jar包下载地址 http://www.trustice.com/java/jnireg/index.shtml ,另外发现openorg上也有类似的,但是类名改掉了,感兴趣的同学可以去搜搜。

IE代理服务器对应于注册表中字段:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings下面的值:ProxyServer,ProxyEnable,ProxyOverride
ProxyEnable用来表示是否使用代理,用0,1表示,类型为REG_DWORD,不能为REG_SZ
ProxyServer用来表示代理服务器ip:port,如localhost:8080,类型为REG_SZ
ProxyOverride表示跳过代理的配置,比如跳过本地代理,该值为<local>

修改注册表类Register,以前也有类似的,但是没有区分REG_DWORD和REG_SZ两种类型

import com.ice.jni.registry.NoSuchKeyException;
import com.ice.jni.registry.RegDWordValue;
import com.ice.jni.registry.RegStringValue;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryException;
import com.ice.jni.registry.RegistryKey;

public class Register {

	// 把ICE_JNIRegistry.dll在的路径加载到java.library.path中,这里是放在classpath下面了
	static {
		System.setProperty("java.library.path",
				Register.class.getResource("/").getPath());
	}

	public String getValue(String folder, String subKeyNode, String subKeyName)
			throws SecurityException, NoSuchFieldException,
			IllegalArgumentException, IllegalAccessException,
			NoSuchKeyException, RegistryException {
		RegistryKey software = Registry.HKEY_CURRENT_USER.openSubKey(folder);
		RegistryKey subKey = software.openSubKey(subKeyNode);
		String value = subKey.getStringValue(subKeyName);
		subKey.closeKey();
		return value;
	}

	public int getIntValue(String folder, String subKeyNode, String subKeyName)
			throws SecurityException, NoSuchFieldException,
			IllegalArgumentException, IllegalAccessException,
			NoSuchKeyException, RegistryException {
		RegistryKey software = Registry.HKEY_CURRENT_USER.openSubKey(folder);
		RegistryKey subKey = software.openSubKey(subKeyNode);
		int value = ((RegDWordValue) subKey.getValue(subKeyName)).getData();
		subKey.closeKey();
		return value;
	}

	public boolean setIntValue(String folder, String subKeyNode,
			String subKeyName, int subKeyValue) throws NoSuchKeyException,
			RegistryException {
		RegistryKey software = Registry.HKEY_CURRENT_USER.openSubKey(folder);
		RegistryKey subKey = software.createSubKey(subKeyNode, "");
		RegDWordValue value = new RegDWordValue(subKey, subKeyName);
		value.setData(subKeyValue);
		subKey.setValue(value);
		subKey.flushKey();
		subKey.closeKey();
		return true;
	}

	public boolean setValue(String folder, String subKeyNode,
			String subKeyName, String subKeyValue) throws NoSuchKeyException,
			RegistryException {
		RegistryKey software = Registry.HKEY_CURRENT_USER.openSubKey(folder);
		RegistryKey subKey = software.createSubKey(subKeyNode, "");
		subKey.setValue(new RegStringValue(subKey, subKeyName, subKeyValue));
		subKey.flushKey();
		subKey.closeKey();
		return true;
	}
}


IE修改代理服务器的注册表的类IE
import java.io.File;

import com.alibaba.b2b.qa.browsers.compare.Browser;
import com.ice.jni.registry.NoSuchKeyException;
import com.ice.jni.registry.NoSuchValueException;
import com.ice.jni.registry.RegistryException;

public abstract class IE implements Browser {
	private static String folder = "SOFTWARE";
	private static String subKeyNode = "Microsoft\\Windows\\CurrentVersion\\Internet Settings";
	private static String subKeyNameServer = "ProxyServer";
	private static String subKeyNameEnable = "ProxyEnable";
	private static String subKeyNameOverride = "ProxyOverride";
	private static String subKeyOverrideValue = "<local>";

	private int originProxyEnable;
	private String originProxyServer;
	private String originProxyOverride;
	private Register register = new Register();

	public boolean backToOriginValue() {

		try {
			register.setIntValue(folder, subKeyNode, subKeyNameEnable,
					originProxyEnable);
			register.setValue(folder, subKeyNode, subKeyNameServer,
					originProxyServer);
			try {
				System.out.println("backed key: "
						+ register.getValue(folder, subKeyNode,
								subKeyNameServer)
						+ " "
						+ register.getIntValue(folder, subKeyNode,
								subKeyNameEnable));
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
			register.setValue(folder, subKeyNode, subKeyNameOverride,
					originProxyOverride);
		} catch (NoSuchKeyException e) {
			e.printStackTrace();
			return false;
		} catch (RegistryException e) {
			e.printStackTrace();
			return false;
		}

		return true;
	}

	@Override
	public boolean changeProxy(String proxyIp, int proxyPort) {
		try {
			enableProxy();
			setProxy(proxyIp, proxyPort);
			try {
				System.out.println("after change key: "
						+ register.getValue(folder, subKeyNode,
								subKeyNameServer)
						+ " "
						+ register.getIntValue(folder, subKeyNode,
								subKeyNameEnable));
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
			setOverride();
		} catch (NoSuchKeyException e) {
			e.printStackTrace();
			return false;
		} catch (RegistryException e) {
			e.printStackTrace();
			return false;
		}

		return true;
	}

	public boolean saveOriginValue() {
		try {
			originProxyServer = register.getValue(folder, subKeyNode,
					subKeyNameServer);
			originProxyEnable = register.getIntValue(folder, subKeyNode,
					subKeyNameEnable);
			System.out.println("save origin value: " + originProxyServer + " "
					+ originProxyEnable);
		} catch (SecurityException e) {
			e.printStackTrace();
			return false;
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			return false;
		} catch (NoSuchKeyException e) {
			e.printStackTrace();
			return false;
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
			return false;
		} catch (IllegalAccessException e) {
			e.printStackTrace();
			return false;
		} catch (RegistryException e) {
			e.printStackTrace();
			return false;
		}

		// 没有勾选跳过本地代理服务器时,没有proxyoverride,此时保存为“”,并且返回true

		try {
			originProxyOverride = register.getValue(folder, subKeyNode,
					subKeyNameOverride);
		} catch (SecurityException e) {
			e.printStackTrace();
			return false;
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			return false;
		} catch (NoSuchKeyException e) {
			e.printStackTrace();
			return false;
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
			return false;
		} catch (IllegalAccessException e) {
			e.printStackTrace();
			return false;
		} catch (NoSuchValueException e) {
			originProxyOverride = "";
			return true;
		} catch (RegistryException e) {
			e.printStackTrace();
			return false;
		}

		return true;
	}

	public abstract File getUrlSnapshot(String url);

	private void enableProxy() throws NoSuchKeyException, RegistryException {
		register.setIntValue(folder, subKeyNode, subKeyNameEnable, 1);
	}

	private void setProxy(String ip, int port) throws NoSuchKeyException,
			RegistryException {
		register
				.setValue(folder, subKeyNode, subKeyNameServer, ip + ":" + port);
	}

	private void setOverride() throws NoSuchKeyException, RegistryException {
		register.setValue(folder, subKeyNode, subKeyNameOverride,
				subKeyOverrideValue);
	}

	public void setRegister(Register register) {
		this.register = register;
	}

}

分享到:
评论
2 楼 passer_by 2011-12-01  
Trinea 写道
【原创】
话说大学时用mfc写过ie代理动态修改的程序

C++搞这些还是方便的
1 楼 Trinea 2011-12-01  
【原创】
话说大学时用mfc写过ie代理动态修改的程序

相关推荐

    彻底清理chrome注册表

    这是一个彻底清理chrome注册表的脚本,下载后双击即可彻底清理chrome注册表,可以解决chrome注册表删除不彻底导致的问题,如:卸载chrome后无法重新下载的问题。

    Chrome插件:X-Forwarded-For Header

    Chrome扩展程序和插件可以通过Chrome Web Store下载安装,并且有权限访问浏览器的一些内部API,以实现与浏览器的深度集成。 **核心组件和文件** 在提供的压缩包文件名列表中,我们可以识别出以下关键组件: 1. **...

    chrome-deps-stable-3.11-1.i386_chrome_

    标题中的"chrome-deps-stable-3.11-1.i386_chrome_"表明这是一个针对Chrome浏览器的稳定依赖包,版本号为3.11,适用于32位(i386)系统。这个包是专门为CentOS操作系统设计的安装程序。 描述中的"Installation for ...

    chrome-immersive-translate-0.7.15.zip

    总结起来,这个"chrome-immersive-translate-0.7.15.zip"是一个实现浏览器内沉浸式翻译功能的Chrome扩展,通过JavaScript脚本处理用户交互和翻译逻辑,使用HTML和CSS构建用户界面,通过manifest.json文件配置扩展...

    Chrome浏览器插件axure-chrome-extension

    Chrome浏览器插件Axure Chrome Extension是一款专为Axure RP设计的工具,旨在增强Axure原型在Chrome浏览器中的体验。Axure RP是一款广泛使用的交互原型设计软件,它允许设计师快速创建 wireframes、prototypes 和 ...

    彻底删除chrome注册表信息脚本

    在某些情况下,当用户试图卸载并重新安装Chrome时,可能会遇到问题,因为旧的注册表信息可能仍然存在,导致新版本无法正常安装或者运行。这时,使用“彻底删除Chrome注册表信息脚本”就显得尤为重要。 注册表是...

    IE_Tab_for_Chrome-10.5.10.1

    描述中提到的"谷歌浏览器IE插件,直接拖入扩展程序中使用",意味着用户可以非常方便地将这个扩展添加到Chrome浏览器中,只需要将提供的CRX文件(即IE_Tab_for_Chrome-10.5.10.1.crx)直接拖拽到浏览器的扩展管理界面...

    tampermonkey-backup-chrome-2021-11-27T01-27-17-766Z.zip

    配置过的油猴插件

    google浏览器注册表配置

    标题中的“google浏览器注册表配置”指的是在Windows操作系统中,通过修改注册表来实现Google浏览器的顺利安装或优化其运行环境。注册表是Windows系统中存储配置信息的关键数据库,包括软件设置、硬件设备配置等。当...

    chrome-IE-Tab.csr

    chrome-IE-tab是一个在谷歌浏览器上加载IE内核的扩展程序,对于有些特殊情况下需要特别使用IE浏览器才能打开的页面或者软件来说,这个扩展程序无疑直接弥补 了谷歌这一个缺点,它能在谷歌浏览器上直接使用IE内核加载...

    chrome-extension-server-log-v4.1.1.zip

    Chrome扩展“Server Log”是一款专为开发者设计的工具,它允许用户在谷歌浏览器环境中查看和分析服务器日志。这个zip文件“chrome-extension-server-log-v4.1.1.zip”是该扩展的特定版本,版本号为4.1.1。在深入探讨...

    chrome实现ie内核(chrome.r39.crx+ffactivex-setup-r39.exe+控件例子)

    标题中的"chrome实现ie内核(chrome.r39.crx+ffactivex-setup-r39.exe+控件例子)"指的是在Chrome浏览器上模拟IE内核的技术实现,这通常是为了兼容那些仅支持Internet Explorer(IE)特定ActiveX控件的网页或应用。...

    IE Tab Chrome 插件,切换IE内核

    总结,IE Tab Chrome插件通过提供IE内核的浏览环境,为用户在Chrome浏览器上访问依赖IE技术的网站提供了便利。对于那些需要同时使用Chrome和IE的用户,这款插件无疑是一个强大的工具,减少了在不同浏览器间切换的...

    tampermonkey-backup-chrome-2021-11-27T13-18-01-624Z.zip

    下载后通过Tampermonkey直接导入即可使用。

    谷歌浏览器Chrome如何直接打开Word-Excel和PPT文档.pdf

    谷歌浏览器Chrome如何直接打开Word-Excel和PPT文档.pdf

    chrome-protocol-proxy:Chrome DevTools协议代理-用于调试目的的智能代理

    Chrome协议代理 chrome-protocol-proxy是小型的反向代理,旨在与。 它捕获所有发送给Chrome的命令和从Chrome接收的事件,将请求与响应合并,从解压缩消息,并提供易于阅读的彩色输出。 该工具是的分支(受其启发)。...

    Chrome同步助手 chrome-sync-helper_v1.7.rar

    在国内使用Chrome浏览器的小伙伴,一直都比较愁。Chrome数据同步的问题。原因大家都懂。 有什么好办法来同步Chrome的数据呢?这里给大家推荐一个Chrome扩展。 官方网站 ...

    java调用chrome浏览器内核cef实现,非jxbrowser

    Java调用Chrome浏览器内核是开发桌面应用时一个常见的需求,尤其在需要嵌入Web页面或者与Web内容交互的场景下。CEF(Chromium Embedded Framework)是一个开源项目,它允许开发者将Google Chrome的Blink渲染引擎和V8...

    命令行设置IE代理服务器设置,实现多机同时上网

    - 在客户端浏览器(如IE、Chrome等)中手动配置代理服务器地址和端口号。 - 通过命令行工具批量设置。 ##### 二、使用命令行工具设置IE代理服务器 1. **准备工作**: - 首先确保主机上已经安装并启动了代理服务...

Global site tag (gtag.js) - Google Analytics