解压过程中如何不要提示复制过程的对话框

至善者善之敌 2010-10-22 06:10:47

vItem Required. The item or items to copy. This can be a string that represents a file name, a FolderItem object, or a FolderItems object.
vOptions Optional. Options for the copy operation. This value can be zero or a combination of the following values. These values are based upon flags defined for use with the fFlags member of the C++ SHFILEOPSTRUCT structure. These flags are not defined as such for Microsoft Visual Basic, Visual Basic Scripting Edition (VBScript), or Microsoft JScript, so you must define them yourself or use their numeric equivalents.
4 Do not display a progress dialog box.
8 Give the file being operated on a new name in a move, copy, or rename operation if a file with the target name already exists.
16 Respond with "Yes to All" for any dialog box that is displayed.
64 Preserve undo information, if possible.
128 Perform the operation on files only if a wildcard file name (*.*) is specified.
256 Display a progress dialog box but do not show the file names.
512 Do not confirm the creation of a new directory if the operation requires one to be created.
1024 Do not display a user interface if an error occurs.
2048 Version 4.71. Do not copy the security attributes of the file.
4096 Only operate in the local directory. Don't operate recursively into subdirectories.
9182 Version 5.0. Do not copy connected files as a group. Only copy the specified files.


bool UnZipFolder(LPCTSTR zipFile,LPCTSTR destination)
{

DWORD strlen = 0;
HRESULT hResult;
IShellDispatch *pISD;
Folder *pToFolder = NULL;
Folder *pFromFolder = NULL;
FolderItems *pFolderItems = NULL;
FolderItem *pItem = NULL;

VARIANT vDir, vFile, vOpt;
BSTR strptr1, strptr2;
CoInitialize(NULL);

bool bReturn = false;

hResult = CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER,
IID_IShellDispatch, (void **)&pISD);

if(FAILED(hResult))
{
return bReturn;
}

VariantInit(&vOpt);
vOpt.vt = VT_I4;
vOpt.lVal = 4; // 这里改成4了依然出现复制过程的对话框,不想要对话框如何改


CString strZipFile(zipFile);
CString strDestination(destination);
strptr1 = strZipFile.AllocSysString();
strptr2 = strDestination.AllocSysString();

VariantInit(&vFile);
vFile.vt = VT_BSTR;
vFile.bstrVal = strptr1;
hResult = pISD->NameSpace(vFile, &pFromFolder);

VariantInit(&vDir);
vDir.vt = VT_BSTR;
vDir.bstrVal = strptr2;

hResult = pISD->NameSpace(vDir, &pToFolder);

if(S_OK == hResult)
{
hResult = pFromFolder->Items(&pFolderItems);
if(SUCCEEDED(hResult))
{
long lCount = 0;
pFolderItems->get_Count(&lCount);
IDispatch* pDispatch = NULL;
pFolderItems->QueryInterface(IID_IDispatch,(void**)&pDispatch);
VARIANT vtDispatch;
VariantInit(&vtDispatch);
vtDispatch.vt = VT_DISPATCH;
vtDispatch.pdispVal = pDispatch;

//cout << "Extracting files ...\n";
hResult = pToFolder->CopyHere(vtDispatch,vOpt);
if(hResult != S_OK) return false;


//Cross check and wait until all files are zipped!
FolderItems* pToFolderItems;
hResult = pToFolder->Items(&pToFolderItems);

if(S_OK == hResult)
{
long lCount2 = 0;

hResult = pToFolderItems->get_Count(&lCount2);
if(S_OK != hResult)
{
pFolderItems->Release();
pToFolderItems->Release();
SysFreeString(strptr1);
SysFreeString(strptr2);
pISD->Release();
CoUninitialize();
return false;
}
//Use this code in a loop if you want to cross-check the items unzipped.
/*if(lCount2 != lCount)
{
pFolderItems->Release();
pToFolderItems->Release();
SysFreeString(strptr1);
SysFreeString(strptr2);
pISD->Release();
CoUninitialize();
return false;
}*/

bReturn = true;
}

pFolderItems->Release();
pToFolderItems->Release();
}

pToFolder->Release();
pFromFolder->Release();
}

//cout << "Over!\n";
SysFreeString(strptr1);
SysFreeString(strptr2);
pISD->Release();

CoUninitialize();
return bReturn;
}
...全文
140 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
至善者善之敌 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gw_net 的回复:]
你最上面的 enum输入是怎么组合的?可能有一种组合可以达到你要的效果的,他不是可以控制dialog的show与否吗?你多试试呀
[/Quote]


4 Do not display a progress dialog box.这里提示了

但我在这里
VariantInit(&vOpt);
vOpt.vt = VT_I4;
vOpt.lVal = 4; // 这里改成4了依然出现复制过程的对话框,不想要对话框如何改
修改后依然提示复制过程的对话框!

gw_net 2010-10-23
  • 打赏
  • 举报
回复
你最上面的 enum输入是怎么组合的?可能有一种组合可以达到你要的效果的,他不是可以控制dialog的show与否吗?你多试试呀
至善者善之敌 2010-10-23
  • 打赏
  • 举报
回复
???
至善者善之敌 2010-10-23
  • 打赏
  • 举报
回复
给个帖子,楼上在看看

http://www.uipower.com/bbs/archiver/tid-124513.html
Eleven 2010-10-22
  • 打赏
  • 举报
回复
你想在后台隐藏解压?
向立天 2010-10-22
  • 打赏
  • 举报
回复
你这又是弄什么呢
WinZip?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧