现在的位置: 首页 > 综合 > 正文

MFC打造Java环境变量设置工具…

2013年10月06日 ⁄ 综合 ⁄ 共 4215字 ⁄ 字号 评论关闭

本工具下载地址:http://download.csdn.net/download/friendan/4538982

本工具VS2005完整源码下载地址:http://download.csdn.net/download/friendan/4538991

 

程序截图如下:

写本程序的目的:

   很多安装Java的JDK的童鞋们,最头疼的莫过于设置Java的环境变量了,

偶一次又一次地帮他们设置,渐渐地就觉得无聊了,于是乎决定写这么个小

工具给他们用,以后偶就不用为此担忧了~_~!...

本程序的难点:

   难点就是如何修改系统的环境变量了,网上查了很久,没发现有什么专门的API

可以直接操作系统的环境变量,许多人都为此苦苦的寻问着,就是找不到API啊!...

本程序的思路:

    某天在查找与环境变量有关的API时,看到一童鞋说系统的环境变量的值就存放在

以下注册表键里:

HKEY_LOCAL_MACHIN\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

XP系统下截图如下:

 

呵呵,既然系统环境变量的值存放在注册表里面,那就好办多了,我们只须修改注册表就可以

修改系统的环境变量了,何必苦苦地去寻找API呢?根据这思路,我用VS2005+MFC完成了本工具的编写~_~!...

注:操作注册表时,我用了ATL库中的类CRegKey, 想了解的话,百度一下即可。

本程序主要代码如下:

//浏览按钮
void CJavaEnvSetToolDlg::OnBnClickedBtnBrowse()
{
	
	TCHAR SelJavaPath[MAX_PATH]={0};  //保存用户选择的Java路径
	BROWSEINFO broInfo={0};	  //浏览变量

    //memset(SelJavaPath, 0, MAX_PATH);   // 初始化SelJavaPath
    //memset(&bi, 0, sizeof(BROWSEINFO)); // 初始化bi
    broInfo.hwndOwner = this->m_hWnd;					//父窗口句柄
    broInfo.pidlRoot  = NULL;							//要显示的文件夹的根(Root) 
    broInfo.pszDisplayName =SelJavaPath;				// 保存被选取的文件夹路径的缓冲区
    broInfo.lpszTitle = _T("请选择Java的安装目录...");  //对话框左上部的标题

    // 指定对话框的外观和功能的标志
    broInfo.ulFlags   = BIF_NEWDIALOGSTYLE   | 
			BIF_DONTGOBELOWDOMAIN| 
			BIF_BROWSEFORCOMPUTER| 
			BIF_RETURNONLYFSDIRS | 
			BIF_RETURNFSANCESTORS;
 
    broInfo.lpfn      = NULL;  //处理事件的回调函数 
    broInfo.lParam    = NULL;  //应用程序传给回调函数的参数
    broInfo.iImage    = NULL;  //保存被选取的文件夹的图片索引
  
    LPITEMIDLIST pIDList = SHBrowseForFolder(&broInfo); //调用函数,打开目录选择对话框 
    if (pIDList== NULL)  
    {    
       AfxMessageBox(_T("获取Java安装路径出错,请联系作者!...")); 
       return;
    }  

    SHGetPathFromIDList(pIDList,SelJavaPath);  //获取Jaa安装目录
    GlobalFree(pIDList);  //释放pIDList占用的系统资源
    
	//将Java安装目录显示在程序界面上
	m_edtJavaPath.SetReadOnly(FALSE);
	m_edtJavaPath.SetWindowText(SelJavaPath);
	m_edtJavaPath.SetReadOnly(TRUE);
}

// 设置Java环境变量按钮
void CJavaEnvSetToolDlg::OnBnClickedBtnSetjavaenv()
{
	if(m_edtJavaPath.LineLength()<3)
	{
		AfxMessageBox(_T("请先通过浏览按钮来选择Java的安装目录!...")); 
        return;
	}

	////获取用户选择的Java安装目录
	TCHAR szJavaPath[MAX_PATH]={0};  
	m_edtJavaPath.GetLine(0,szJavaPath,MAX_PATH);
	
	//判断用户选择的目录是否为Java的安装目录
	CFileFind fFind;
	CString csJAVA_HOME=szJavaPath;
	csJAVA_HOME+=_T("\\jre\\bin");
	if(!fFind.FindFile(csJAVA_HOME))
	{
		AfxMessageBox(_T("请选择正确的Java安装目录!...")); 
		return;
	}
	
	//设置Java环境
	if(SetJavaEnv(szJavaPath))
		AfxMessageBox(_T("OK,Java运行环境设置完毕^_^!..."));
	else
		AfxMessageBox(_T("Sorry!~_~Java运行环境设置失败!..."));

}


// 设置Java环境变量函数,参数szJdkPath为java的安装目录
bool CJavaEnvSetToolDlg::SetJavaEnv(CString szJdkPath)
{
	CRegKey EnvKey; //使用MFC提供的这个类的时候,在你的头文件(.h)或者是源文件(.cpp)里面包含atlbase.h

	//打开注册表中存放环境变量的键,为向其添加键值做好准备,注意:添加键值前必须先将其打开
	if(EnvKey.Open(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment")) != ERROR_SUCCESS)   
	{   
		AfxMessageBox(_T("打开注册表失败!")); 
		return FALSE;
	}
    

	//设置JAVA_HOME
	//EnvKey.SetValue(szJdkPath,_T("JAVA_HOME"));//此方法已过期,用以下方法来代替
	EnvKey.SetStringValue(_T("JAVA_HOME"),szJdkPath);

    //设置CLASSPATH
    CString CLASSPATH=_T(".;%JAVA_HOME%\\lib\\dt.jar;%JAVA_HOME%\\lib\\tools.jar;%JAVA_HOME%\\jre\\lib\\rt.jar;");
	//EnvKey.SetValue(CLASSPATH,_T("CLASSPATH"));//此方法已过期,用以下方法来代替
	EnvKey.SetStringValue(_T("CLASSPATH"),CLASSPATH);

    //设置PATH
	TCHAR szPath[2048]={0};
	ULONG length=2048;
	//EnvKey.QueryValue(szPath, _T("Path"), &length);//此方法已过期,用以下方法来代替
	EnvKey.QueryStringValue(_T("Path"),szPath,&length);
	CString PATH=szPath; //获取PATH原来的值
	PATH.Replace( _T("%JAVA_HOME%\\bin;%JAVA_HOME%\\jre\\bin;"), _T(""));//防止用户多次使用本工具而产生重复设置
	CString newPath=_T("%JAVA_HOME%\\bin;%JAVA_HOME%\\jre\\bin;");
	newPath+=PATH;
    //EnvKey.SetValue(newPath,_T("Path"));//此方法已过期,用以下方法来代替
	EnvKey.SetStringValue(_T("Path"),newPath);

	return TRUE;
}

//卸载Java环境变量按钮
void CJavaEnvSetToolDlg::OnBnClickedBtnUnloadjavaenv()
{
	CRegKey EnvKey; //使用MFC提供的这个类的时候,在你的头文件(.h)或者是源文件(.cpp)里面包含atlbase.h

	//打开注册表中存放环境变量的键,为向其添加键值做好准备,注意:添加键值前必须先将其打开
	if(EnvKey.Open(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment")) != ERROR_SUCCESS)   
	{   
		AfxMessageBox(_T("打开注册表失败!")); 
		return;
	}

	//删除JAVA_HOME
	EnvKey.DeleteValue(_T("JAVA_HOME"));
	

	//删除CLASSPATH
	EnvKey.DeleteValue(_T("CLASSPATH"));

	//删除Path中的%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
	TCHAR szPath[2048]={0};
	ULONG length=2048;
	//EnvKey.QueryValue(szPath, _T("Path"), &length);//此方法已过期,用以下方法来代替
	EnvKey.QueryStringValue(_T("Path"),szPath,&length);
	CString PATH=szPath; //获取PATH原来的值
	PATH.Replace( _T("%JAVA_HOME%\\bin;%JAVA_HOME%\\jre\\bin;"), _T(""));
   // EnvKey.SetValue(PATH,_T("Path"));//此方法已过期,用以下方法来代替
	EnvKey.SetStringValue(_T("Path"),PATH);

	AfxMessageBox(_T("OK,Java环境变量卸载完毕!"));
	return;
}

 

 

抱歉!评论已关闭.