原创文章,转载请注明出处: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;
}
}
分享到:
相关推荐
这是一个彻底清理chrome注册表的脚本,下载后双击即可彻底清理chrome注册表,可以解决chrome注册表删除不彻底导致的问题,如:卸载chrome后无法重新下载的问题。
总结起来,这个"chrome-immersive-translate-0.7.15.zip"是一个实现浏览器内沉浸式翻译功能的Chrome扩展,通过JavaScript脚本处理用户交互和翻译逻辑,使用HTML和CSS构建用户界面,通过manifest.json文件配置扩展...
Chrome扩展程序和插件可以通过Chrome Web Store下载安装,并且有权限访问浏览器的一些内部API,以实现与浏览器的深度集成。 **核心组件和文件** 在提供的压缩包文件名列表中,我们可以识别出以下关键组件: 1. **...
标题中的"chrome-deps-stable-3.11-1.i386_chrome_"表明这是一个针对Chrome浏览器的稳定依赖包,版本号为3.11,适用于32位(i386)系统。这个包是专门为CentOS操作系统设计的安装程序。 描述中的"Installation for ...
在某些情况下,当用户试图卸载并重新安装Chrome时,可能会遇到问题,因为旧的注册表信息可能仍然存在,导致新版本无法正常安装或者运行。这时,使用“彻底删除Chrome注册表信息脚本”就显得尤为重要。 注册表是...
Chrome浏览器插件Axure Chrome Extension是一款专为Axure RP设计的工具,旨在增强Axure原型在Chrome浏览器中的体验。Axure RP是一款广泛使用的交互原型设计软件,它允许设计师快速创建 wireframes、prototypes 和 ...
通过使用代理服务器,LoadRunner 11用户可以突破默认浏览器录制的局限性,更好地利用Chrome、Firefox等现代浏览器的优势,提高录制质量和效率。当然,在实际操作过程中,还需注意各种细节设置,确保录制流程顺利进行...
在国内使用Chrome浏览器的小伙伴,一直都比较愁。Chrome数据同步的问题。原因大家都懂。 有什么好办法来同步Chrome的数据呢?这里给大家推荐一个Chrome扩展。 官方网站 ...
描述中提到的"谷歌浏览器IE插件,直接拖入扩展程序中使用",意味着用户可以非常方便地将这个扩展添加到Chrome浏览器中,只需要将提供的CRX文件(即IE_Tab_for_Chrome-10.5.10.1.crx)直接拖拽到浏览器的扩展管理界面...
配置过的油猴插件
标题中的“google浏览器注册表配置”指的是在Windows操作系统中,通过修改注册表来实现Google浏览器的顺利安装或优化其运行环境。注册表是Windows系统中存储配置信息的关键数据库,包括软件设置、硬件设备配置等。当...
Java调用Chrome浏览器内核是开发桌面应用时一个常见的需求,尤其在需要嵌入Web页面或者与Web内容交互的场景下。CEF(Chromium Embedded Framework)是一个开源项目,它允许开发者将Google Chrome的Blink渲染引擎和V8...
chrome-IE-tab是一个在谷歌浏览器上加载IE内核的扩展程序,对于有些特殊情况下需要特别使用IE浏览器才能打开的页面或者软件来说,这个扩展程序无疑直接弥补 了谷歌这一个缺点,它能在谷歌浏览器上直接使用IE内核加载...
通过这个插件,用户可以直接在浏览器中进行测试管理、执行、监控等一系列操作,极大地提高了测试效率。 1. **Chrome扩展程序基础知识**: Chrome插件是一种基于Web技术(HTML、CSS、JavaScript)构建的浏览器扩展...
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内核的技术实现,这通常是为了兼容那些仅支持Internet Explorer(IE)特定ActiveX控件的网页或应用。...
下载后通过Tampermonkey直接导入即可使用。
谷歌浏览器Chrome如何直接打开Word-Excel和PPT文档.pdf
Chrome协议代理 chrome-protocol-proxy是小型的反向代理,旨在与。 它捕获所有发送给Chrome的命令和从Chrome接收的事件,将请求与响应合并,从解压缩消息,并提供易于阅读的彩色输出。 该工具是的分支(受其启发)。...