VC++调用winrar
来源:互联网 发布:js转义html的特殊字符 编辑:程序博客网 时间:2024/06/06 09:55
1.首先判断是否安装winrar,读注册表
#include <iostream.h>#include <windows.h>//有的主机上的注册表键值不全,必须进行对多个键的分析char* value1="InstallLocation";char* value2="UninstallString";char* value3="DisplayIcon";//保存winrar的安装路径char winrarInstallPath[260]={0};//检测是否安装winrarbool isInstallWinrar(){HKEY hSubKey=NULL;long result=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WinRAR archiver",0,KEY_READ,&hSubKey);if(result!=ERROR_SUCCESS)return false;DWORD size=sizeof(winrarInstallPath);DWORD type=REG_SZ;//读取第一个优先的属性值result=RegQueryValueEx(hSubKey,value1,NULL,&type,(unsigned char*)winrarInstallPath,&size);//第一个属性读取不到if(result!=ERROR_SUCCESS){//读取第二个属性result=RegQueryValueEx(hSubKey,value2,NULL,&type,(unsigned char*)winrarInstallPath,&size);if(result!=ERROR_SUCCESS){//第二个属性也读取不到,开始读取第三个属性result=RegQueryValueEx(hSubKey,value3,NULL,&type,(unsigned char*)winrarInstallPath,&size);}//通过第二或第三属性读取到if(result==ERROR_SUCCESS){int len=strlen(winrarInstallPath);while (winrarInstallPath[--len]!='\\'){winrarInstallPath[len]=0;}}//还是没有读取到else{RegCloseKey(hSubKey);return false;}}RegCloseKey(hSubKey);strcat(winrarInstallPath,"WinRAR.exe");return true;}void main(){if(isInstallWinrar())cout<<winrarInstallPath<<endl;elsecout<<"没有安装winrar"<<endl;}
//传递需要解压的源文件路径,绝对路径//解压,本函数为阻塞状态,直到解压进程完成,函数才会返回,所以调用的地方将是阻塞调用//返回值:winrar退出代码//srcFloder和destFloder要么都加'\',要么都不加int deCompress(const char*srcFilePath,const char*srcFloder,const char*destFloder){//去除后缀,vs2010.iso解压后必定存在于vs2010文件夹内,//尤其需要注意的是解压的目的文件夹必须加'\'string dest=srcFilePath;int pos=dest.find_last_of('.');dest.replace(pos,dest.length()-pos,"");dest+="\\";dest.replace(0,strlen(srcFloder),destFloder);//x解压 -ibck后台执行 -o+如存在,则覆盖 -inul不弹出错误提示string strCmd=string(winrarInstallPath)+" x -ibck -o+ -inul "+srcFilePath+" "+dest;STARTUPINFO si={sizeof(si)};//本来想通过下面两句使winrar后台,即隐藏界面,但实践发现,只对命令行解压工具rar.exe有效,//但是rar.exe又只能解压rar格式的,所以才使用 -ibck,但也没有真正隐藏,只是缩小到了系统托盘区域//si.dwFlags!=STARTF_USESHOWWINDOW;//si.wShowWindow=SW_HIDE;PROCESS_INFORMATION pi;BOOL bRet=CreateProcess(NULL,(char*)strCmd.c_str(),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);DWORD dwExit=-1;if(bRet){//这个地方将导致该函数为阻塞状态WaitForSingleObject(pi.hProcess,INFINITE);::GetExitCodeProcess(pi.hProcess,&dwExit);CloseHandle(pi.hThread);CloseHandle(pi.hProcess);}return dwExit;}
- VC调用WinRAR压缩文件
- VC++调用winrar
- 利用VC调用WinRAR解压和压缩文件
- 利用VC调用WinRAR解压和压缩文件
- 【MFC】VC调用WinRar解压文件(如:.gz)
- 解压缩算法(调用winrar)
- 多进程调用winrar
- ShellExecute调用WinRar
- c# 调用WinRAR压缩,解压
- C#调用winrar压缩文件夹
- C#调用Winrar实现解压缩
- node调用winRAR应用程序解压
- 用VC解压缩文件(WinRAR)
- VC中启用WINRAR压缩文件的方法
- 用VC解压缩文件(WinRAR)
- winrar
- WinRAR
- 调用Winrar.exe压缩和解压缩
- 代码_网络_WWW
- 线程的同步--互斥锁
- Android输入法框架中按键消息的处理流程
- 多线程-----经典解释监视器和对象锁
- C++ deque
- VC++调用winrar
- 第十二周-求解分段函数的值4
- 特殊求和
- 数据结构循环队列以及打印杨辉三角
- 两个数的最大公约数和最小公倍数(利用辗转相除法)
- 使用JDOM创建xml文件
- folly源码分析(1) - Conv.h
- union和union all有什么不同
- Python_Kivy_问题总结