IShellFolder *psf;
if (SUCCEEDED(SHGetDesktopFolder(&psf)))
{
OutputDebugStringA("into SHGetDesktopFolder");
IShellView* psve;
SFV_CREATE sfv;
sfv.cbSize = sizeof(SFV_CREATE);
sfv.psfvcb = NULL;
sfv.pshf = psf;
sfv.psvOuter = NULL; /**/
if (SUCCEEDED(SHCreateShellFolderView(&sfv, (IShellView**)&psve)))
{
OutputDebugStringA("into CreateViewObject");
IEnumIDList* pedl;
LPITEMIDLIST pidlItem;
if (SUCCEEDED(psf->EnumObjects(hExplorer, SHCONTF_NONFOLDERS, &pedl)))
{
OutputDebugStringA("into pedl");
int index = 0;
do
{
int bindex = 0;
STRRET str;
pedl->Next(index++, &pidlItem, (ULONG*)&bindex);
if (SUCCEEDED(psf->GetDisplayNameOf(pidlItem, SHGDN_FORPARSING, &str)))
{
TCHAR szItem[MAX_PATH];
StrRetToBuf(&str, pidlItem, szItem, MAX_PATH);
if (isReviseFile(szItem))
{
OutputDebugString(szItem);
psve->SelectItem(pidlItem, SVSI_DESELECT);
}
}
} while (pidlItem != NULL);
}
psve->Release();
}
psf->Release();
}
uj5u.com熱心網友回復:
雖然ishellview不是NULL但是執行這代碼沒有效果
psve->SelectItem(pidlItem, SVSI_DESELECT);
uj5u.com熱心網友回復:
權限問題 ?uj5u.com熱心網友回復:
我這是在COM組件里面寫的 通過regsvr32注冊了的 系統自動加載到資源管理器,有點不明白權限問題是怎么回事uj5u.com熱心網友回復:
GetLastError ?uj5u.com熱心網友回復:
getlasterror()回傳值是0,真是鬧不明白啊uj5u.com熱心網友回復:
不要沉啊
uj5u.com熱心網友回復:
頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂uj5u.com熱心網友回復:
你這是自己創建了一個新的shell view(類似自己寫了個資源管理器),你的代碼對桌面并不會有影響,這是設計行為。uj5u.com熱心網友回復:
哇 真是茅塞頓開 不知道怎么獲取桌面上的ishellview呢uj5u.com熱心網友回復:
這么說的話 IShellFolder *psf;psf->CreateViewObject(hExplorer, IID_IShellView, (void**)&psve)
通過種方式創建的shellview也是自定義的 不能操作桌面上的檔案
uj5u.com熱心網友回復:
我在msdn上看 IShellFolder ::CreateViewObject能創建系統的ishellview 是不是有什么條件 我這種方法創建的還是對桌面沒有什么影響
To support this request, create an object that exposes the interface indicated by riid and return a pointer to that interface.
The primary purpose of this method is to provide Windows Explorer with the folder object's folder view object. Windows Explorer requests a folder view object by setting riid to IID_IShellView. The folder view object displays the contents of the folder in the Windows Explorer folder view. The folder view object must be independent of the Shell folder object, because Windows Explorer may call this method more than once to create multiple folder view objects. A new view object must be created each time this method is called. Your folder object can respond in one of two ways to this request. It can:
Create a custom folder view object and return a pointer to its IShellView interface.
Create a system folder view object and return a pointer to its IShellView interface.
uj5u.com熱心網友回復:
Vista開始桌面可以用IShellWindows訪問。XP下桌面沒有API,你可以查桌面上是不是有SysListView32 視窗,如果是的話,那么有大概率是桌面那個defview,這個在XP下item data是pidl,但是注意用戶是可以自己用Active Desktop在桌面上放別的defview視窗的。
uj5u.com熱心網友回復:
這個是創建的新的并不是已有桌面的。我也為這個問題困擾了很久。。。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/43665.html
上一篇:Matlab影像切邊
