系统:win7 64
编译器:vs2010 mfc对话框程序。
工程名:fixde
语言:c++
涉及函数:
GetPrivateProfileString 读取配置文件内容,类型为string
GetDriveType 获取某驱动器状态
GetVolumeNameForVolumeMountPoint 保存某驱动器的信息
DeleteVolumeMountPoint 删除某驱动器的盘符号
SetVolumeMountPoint 给删除掉盘符的驱动器设置新的盘符名
工程实现:
1.判断系统是否插入了某盘。
2.获取exe所在路径。
3.读取配置文件ini的内容。
4.修改系统的盘符为我们想要设置的名称。
该对话框工程添加的全局变量有点多,如果会的人直接看重点。具体关键代码如下。
如果是编程老手,可以直接看下面的函数,如果是新手,工程下载地址:http://download.csdn.net/download/i_likechard/9887618
除此之外,有个尴尬的问题,在下载的工程里面第二步中的代码(读取配置文件中的内容,判断某盘符连接状态)和下面的不一样。由于上传之后的文件无法修改了。下载后将下面第二步的代码修改为和本文中一样的就可以在逻辑上正常运行了。
第一步:.h文件中添加
public:
CStatic m_static1; //资源文件中添加的Static控件变量。
CString str; //此字符串用于存储提示信息。
CString modifydrive;//待修改的盘符名。
CString aimmodifydrive;
//CString vn;
CEdit m_edit;
afx_msg void OnBnClickedOk();
CButton m_button;
TCHAR vn[MAX_PATH];
第二步:.cpp文件中的OnInitDialog()函数中中添加以下代码
//获取配置文件路径,由于config.ini配置文件放置于exe所在目录下,所以利用获取exe路径后添加path+“config.ini”获取到配置文件路径。
CString path=AfxGetApp()->m_pszHelpFilePath;
CString str=AfxGetApp()->m_pszExeName;
path=path.Left(path.GetLength()-str.GetLength()-4);
m_button.EnableWindow(FALSE); //修改盘符的button控件初始化为不可用。
//读取配置文件中的内容,到局部变量中。
char chdrive1[16]= {0};
GetPrivateProfileStringA("修改后盘符号","aimmodifydrive1","D:",chdrive1,16,path+"config.ini"); //获取配置文件中的内容。第三个参数为默认值,当无法读取到配置文件时,或者配置文件中该项未设置时,默认值。
aimmodifydrive=chdrive1;//将获取到的内容,保存于string类型中。
char chdrive2[16]= {0};
GetPrivateProfileStringA("待修改盘符号","modifydrive1","E:",chdrive2,16,path+"config.ini"); //获取配置文件中的内容。第三个参数为默认值,当无法读取到配置文件时,或者配置文件中该项未设置时,默认值。
modifydrive=chdrive2; //将获取到的内容,保存于string类型中。
if (GetDriveType(aimmodifydrive) == DRIVE_NO_ROOT_DIR) //判断D是否存在。
{
str=aimmodifydrive+"盘不存在 \n";
m_edit.SetWindowTextA(str);
if (GetDriveType(modifydrive) == DRIVE_NO_ROOT_DIR) //判断E是否存在。
{
str+=modifydrive+"盘不存在 \n";
m_edit.SetWindowTextA(str);
}
else
{
str+=modifydrive+"盘存在 \n";
m_edit.SetWindowTextA(str);
m_button.EnableWindow(TRUE);
}
}
else
{
str=aimmodifydrive+"盘存在,硬盘连接正常 \n";
m_edit.SetWindowTextA(str); //控件显示提示内容。
}
第三部:编写修改盘符的函数。
void CfixdeDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
GetVolumeNameForVolumeMountPoint( TEXT(modifydrive+"\\"), vn, _countof(vn) ); //保存待修改盘符的信息
DeleteVolumeMountPoint( TEXT(modifydrive+"\\") );//删除此盘符的名称
SetVolumeMountPoint( TEXT(aimmodifydrive+"\\"), vn );//设置此盘符为我们需要的盘符名。
str+="盘符修改完毕 \n";
m_edit.SetWindowTextA(str);//static控件显示提示信息。
m_button.EnableWindow(FALSE);//修改完成后,将改函数控件设置为不可用,防止再次运行导致的逻辑错误。
return ;
}
第五部:配置文件config.ini中的内容
[待修改盘符号]
modifydrive1 = Z:
[修改后盘符号]
aimmodifydrive1=H: