工控编程吧
标题:
190上位机VC MFC利用压缩软件解压压缩文件
[打印本页]
作者:
qq263946146
时间:
2016-1-29 21:17
标题:
190上位机VC MFC利用压缩软件解压压缩文件
(, 下载次数: 3)
上传
点击文件名下载附件
190上位机VC MFC利用压缩软件解压压缩文件
功能展示
压缩软件有很多种,快压好压WINRAR等等,我们当前例程通过自己编写程序后台调用WINRAR压缩软件,实现文件的解压与压缩,效果如图;
要点提示
WINRAR解压软件的调用可以用函数ShellExecute(); ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制
ShellExecute函数原型及参数含义如下:
ShellExecute(
hWnd: HWND; {指定父窗口句柄}
Operation: PChar; {指定动作, 譬如: open、runas、print、edit、explore、find[2] }
FileName: PChar; {指定要打开的文件或程序}
Parameters: PChar; {给要打开的程序指定参数; 如果打开的是文件这里应该是nil}
Directory: PChar; {缺省目录}
ShowCmd: Integer {打开选项}
): HINST;
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);
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/0fb2833ab27b3602a16043a4de0554a3/0/0/w_19rtbcubyl.swf-albumId=5268154209-tvId=5268154209-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 1)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4