当前位置 : 主页 > 编程语言 > java >

c 语言获取windows系统代理设置,因为java语言对于注册表信息功能比较弱,所以

来源:互联网 收集:自由互联 发布时间:2021-06-28
c 语言获取注册代理信息 #include #include int main(void){ char data[1024];//存放获取结果集 long result,open_result;//查询的结果 DWORD dataType,dword_result; //要读取的注册表的键值 HKEY_CURRENT_USER char regnam
c 语言获取注册代理信息
#include 
 
  
#include 
  
    int main(void){ char data[1024];//存放获取结果集 long result,open_result;//查询的结果 DWORD dataType,dword_result; //要读取的注册表的键值 HKEY_CURRENT_USER char regname [] = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"; HKEY hKey; open_result = RegOpenKey(HKEY_CURRENT_USER,regname,&hKey);//打开键 if(open_result!=ERROR_SUCCESS){ printf("%s\n","打开键失败"); return 1; } //dataType 1 字符串 4 DWORD DWORD datasize = sizeof(data); result = RegQueryValueEx(hKey,"ProxyServer",NULL,&dataType,(LPBYTE)data,&datasize);//提取内容 if(result!=ERROR_SUCCESS){ printf("%s\n","获取内容失败"); return 1; } printf("dataType:%d\n",dataType); printf("datasize:%d\n",datasize); if(dataType==4&&datasize==4){ memcpy(&dword_result, (DWORD*)data, datasize); printf("dword_result:%d\n",dword_result); } // ProxyEnable 是否使用代理,1 使用代理,0 不使用 //不使用代理的地址 ProxyOverride //代理服务器的信息 ProxyServer printf("%s\n",data); RegCloseKey(hKey); return 0; }
  
 
jni 对应的c 语言的实现
#include "com_shxzhlxrr_Register.h"
#include 
 
  
#include 
  
    #include 
   
     JNIEXPORT jstring JNICALL Java_com_shxzhlxrr_Register_getProxySetting (JNIEnv * env, jclass _this, jstring keyname){ //声明错误信息提示 const char open_key_error [] = "fail_open_key_error"; const char get_val_error [] = "fail_get_val_error"; //声明变量 char regname [] = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"; const char * key_name ;//用来存放传入的字符串 DWORD dataType,dword_result; char data [1024]; char dword_val[4]; HKEY hKey; //-----------------------变量的声明结束--------------------------- key_name = env->GetStringUTFChars(keyname, NULL);//把传入的字符串转换成原生的类型 if(RegOpenKey(HKEY_CURRENT_USER,regname,&hKey)!=ERROR_SUCCESS){ RegCloseKey(hKey); return env->NewStringUTF(open_key_error); } //dataType 1 字符串 4 DWORD DWORD datasize = sizeof(data); if(RegQueryValueEx(hKey,key_name,NULL,&dataType,(LPBYTE)data,&datasize)!=ERROR_SUCCESS){ RegCloseKey(hKey); return env->NewStringUTF(get_val_error); } //释放资源 RegCloseKey(hKey); //free(key_name); //如果是DWORD类型的,进行转换 if(dataType==4&&datasize==4){//转换有问题 //printf("get is number type value!\n"); memcpy(&dword_result, (DWORD*)data, datasize); //printf("number value :%d,%s!\n",dword_result,(char*)dword_result); //memcpy(dword_val, (char*)&dword_result, 4); _ultoa(dword_result,dword_val,10); return env->NewStringUTF(dword_val); }else{ //printf("get is string type value!\n"); return env->NewStringUTF(data); } }
   
  
 
jni对应的java代码
package com.shxzhlxrr;
/**
 * 注册表信息
 * @author zxr
 * 2017年12月30日 下午4:07:55
 */
public class Register {
	
	public static final String PROXY_SERVER = "ProxyServer";//代理服务器
	
	public static final String PROXY_OVERRIDE = "ProxyOverride";//不使用代理的路径
	
	public static final String PROXY_ENABLE = "ProxyEnable";//是否启用代理 1 启用  0 不启用
	
	static {
		System.loadLibrary("Register");
	}
	
	public static native String getProxySetting(String reg_name);
	
	public static void main(String[] args) {
		System.out.println(Register.getProxySetting("ProxyServer"));
		System.out.println(Register.getProxySetting("ProxyOverride"));
		System.out.println(Register.getProxySetting("ProxyEnable"));
		String flag = Register.getProxySetting("ProxyEnable");
		if("0".equals(flag)){
			System.out.println("没有启用");
		}
	}

}
网友评论