190上位机VC MFC利用压缩软件解压压缩文件
190上位机VC MFC利用压缩软件解压压缩文件 功能展示 压缩软件有很多种,快压好压WINRAR等等,我们当前例程通过自己编写程序后台调用WINRAR压缩软件,实现文件的解压与压缩,效果如图; WINRAR解压软件的调用可以用函数ShellExecute(); ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制 Operation: PChar; {指定动作, 譬如: open、runas、print、edit、explore、find[2] } FileName: PChar; {指定要打开的文件或程序} Parameters: PChar; {给要打开的程序指定参数; 如果打开的是文件这里应该是nil} ShowCmd 参数可选值:SW_HIDE = 0; {隐藏} SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活} SW_NORMAL = 1; {同 SW_SHOWNORMAL} SW_SHOWMINIMIZED = 2; {最小化, 激活} SW_SHOWMAXIMIZED = 3; {最大化, 激活} SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED} SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活} SW_SHOW = 5; {同 SW_SHOWNORMAL} SW_MINIMIZE = 6; {最小化, 不激活} SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE} SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE} SW_RESTORE = 9; {同 SW_SHOWNORMAL} SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL} SW_MAX = 10; {同 SW_SHOWNORMAL}
使用此函数控制WINRAR时通过函数的第四个参数实现,第四个参数的具体形式可以参照例程或参数例程根目录的<调用WINRAR软件的指令用法>使用; 要注意的是指令用空格分割不同部分,所以在解压带空格的文件时,注意空格问题; WIN8系统调用此函数打开文件无效。 实现功能 1.新建基于对话框的应用程序 2.拖拽一编辑框ID为IDC_EDIT1,用于显示WINRAR软件的安装路径;依次拖拽按钮<获取WINRAR安装路径>《解压指定压缩文件》《压缩指定文件夹》 - void CGkbc8Dlg::OnPath()
- {
- HKEY hKEY;
- LPCTSTR Rgspath = _T("Software\\WinRAR");
- LONG ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Rgspath, 0, KEY_READ, &hKEY);
- if(ret != ERROR_SUCCESS)
- {
- ::MessageBox(NULL, _T("获取WinRAR安装路径失败!"), _T("出错啦~!"), MB_OK);
- RegCloseKey(hKEY);
- return ;
- }
- // 读取键值内容
- DWORD type = REG_SZ;
- BYTE PathInfo[MAX_PATH];
- DWORD dwInfoSize = MAX_PATH;
- ret = RegQueryValueEx(hKEY, _T("exe32"), NULL, &type, PathInfo, &dwInfoSize);
- if(ret != ERROR_SUCCESS)
- {
- ::MessageBox(NULL, _T("没有安装WinRar解压缩软件,请先安装WinRar解压缩软件"), _T("出错啦~!"), MB_OK);
- RegCloseKey(hKEY); return ;
- }
- CString Path;
- Path.Format("%s",PathInfo);
- SetDlgItemText(IDC_EDIT1,Path);
- }
复制代码- void CGkbc8Dlg::OnUnzip()
- {
- CFileDialog Dlg(true,"rar",NULL,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_EXPLORER,"RAR文件(*.rar)|*.rar||",this);
- if(Dlg.DoModal()==IDOK)
- {
- CString sFromFile = Dlg.GetPathName();//要解压的文件
- CString sToFile = sFromFile.Left(sFromFile.Find("."));//解压到的目录
- CString sCommand;
- sCommand.Format("X %s %s",sFromFile,sToFile);//执行解压的指令
- ::CreateDirectory(sToFile,NULL);
- ::ShellExecute(NULL,"open","WinRar.exe",sCommand,NULL,SW_SHOW);
- }
- } BROWSEINFO bi;
- char buffer[MAX_PATH];
- ZeroMemory(buffer,MAX_PATH);
- bi.hwndOwner=GetSafeHwnd();
- bi.pidlRoot=NULL;
- bi.pszDisplayName=buffer;
- bi.lpszTitle="选择一个文件夹";
- bi.ulFlags=BIF_EDITBOX;
- bi.lpfn=NULL;
- bi.lParam=0;
- bi.iImage=0;
- LPITEMIDLIST pList=NULL;
- if((pList=SHBrowseForFolder(&bi))!=NULL)
- {
- char path[MAX_PATH];
- ZeroMemory(path,MAX_PATH);
- SHGetPathFromIDList(pList,path);
- CString sFromFile(path),sCommand;
- sFromFile += ".rar";//要压缩的文件
- CString sToFile(path);//压缩文件的存放目录
- sCommand.Format("a %s %s",sFromFile,sToFile);//指令注意空格
- ::ShellExecute(NULL,"open","WinRar.exe",sCommand,NULL,SW_SHOW);
- }
复制代码我们来演示下功能实现的整个过程
|