程序截图如下:
写本程序的目的:
很多安装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;
}