如何解决为 CFAPI 设置状态图标未按预期工作
我尝试将使用 CFAPI 创建的占位符文件的状态图标设置为错误。 (见下文)
我在文件上设置了错误状态,但它没有显示错误。但是错误显示在包含文件夹中。
我使用以下代码设置文件错误(完整代码发布于 github):
void SetTransferStatus(_In_ PCWSTR fullPath,_In_ SYNC_TRANSFER_STATUS status)
{
// Tell the Shell so File Explorer can display the progress bar in its view
try
{
// First,get the Volatile property store for the file. That's where the properties are maintained.
winrt::com_ptr<IShellItem2> shellItem;
winrt::check_hresult(SHCreateItemFromParsingName(fullPath,nullptr,__uuidof(shellItem),shellItem.put_void()));
winrt::com_ptr<IPropertyStore> propStoreVolatile;
winrt::check_hresult(
shellItem->GetPropertyStore(
GETPROPERTYSTOREFLAGS::GPS_READWRITE | GETPROPERTYSTOREFLAGS::GPS_VOLATILEPROPERTIESONLY,__uuidof(propStoreVolatile),propStoreVolatile.put_void()));
// Set the sync transfer status accordingly
PROPVARIANT transferStatus;
winrt::check_hresult(
InitPropVariantFromUInt32(
status,&transferStatus));
winrt::check_hresult(propStoreVolatile->SetValue(PKEY_SyncTransferStatus,transferStatus));
// Without this,all your hard work is wasted.
winrt::check_hresult(propStoreVolatile->Commit());
// Broadcast a notification that something about the file has changed,so that apps
// who subscribe (such as File Explorer) can update their UI to reflect the new progress
SHChangeNotify(SHCNE_UPDATEITEM,SHCNF_PATH,static_cast<LPCVOID>(fullPath),nullptr);
//wprintf(L"Succesfully Set Transfer Progress on \"%s\" to %llu/%llu\n",fullPath,completed,total);
}
catch (...)
{
// winrt::to_hresult() will eat the exception if it is a result of winrt::check_hresult,// otherwise the exception will get rethrown and this method will crash out as it should
wprintf(L"Failed to Set Transfer Progress on \"%s\" with %08x\n",static_cast<HRESULT>(winrt::to_hresult()));
}
}
另外,如果我删除文件并创建一个新文件,状态仍然会出错。
解决方法
有人向我指出了 Windows 云镜像示例中的一个 pull request,该示例展示了如何完成此操作。
这是代码:
master
A--B-...--M--..............--Y--Z--
\ /
\ /
feature nA--nB--nC--nD--nE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。