本文整理汇总了C++中IShellFolder::GetDisplayNameOf方法的典型用法代码示例。如果您正苦于以下问题:C++ IShellFolder::GetDisplayNameOf方法的具体用法?C++ IShellFolder::GetDisplayNameOf怎么用?C++ IShellFolder::GetDisplayNameOf使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IShellFolder
的用法示例。
在下文中一共展示了IShellFolder::GetDisplayNameOf方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetDisplayName
HRESULT GetDisplayName(LPCITEMIDLIST pidlDirectory,TCHAR *szDisplayName,UINT cchMax,DWORD uFlags)
{
if(pidlDirectory == NULL ||
szDisplayName == NULL)
{
return E_FAIL;
}
IShellFolder *pShellFolder = NULL;
LPITEMIDLIST pidlRelative = NULL;
STRRET str;
HRESULT hr;
hr = SHBindToParent(pidlDirectory, IID_PPV_ARGS(&pShellFolder),
(LPCITEMIDLIST *)&pidlRelative);
if(SUCCEEDED(hr))
{
hr = pShellFolder->GetDisplayNameOf(pidlRelative,uFlags,&str);
if(SUCCEEDED(hr))
{
hr = StrRetToBuf(&str,pidlDirectory,szDisplayName,cchMax);
}
pShellFolder->Release();
}
return hr;
}
示例2: GetComputerNameFromIDList
DWORD Network::GetComputerNameFromIDList(LPITEMIDLIST lpiil,LPSTR szName,DWORD dwBufferLen)
{
// May be computer?
IShellFolder *psf;
if (!SUCCEEDED(SHGetDesktopFolder(&psf)))
return 0;
SHDESCRIPTIONID di;
if (!SUCCEEDED(SHGetDataFromIDList(psf,lpiil,SHGDFIL_DESCRIPTIONID,&di,sizeof(SHDESCRIPTIONID))))
{
psf->Release();
return 0;
}
if (di.clsid!=CLSID_NetworkPlaces)
{
psf->Release();
return 0;
}
STRRET str;
if (!SUCCEEDED(psf->GetDisplayNameOf(lpiil,SHGDN_FORPARSING,&str)))
{
psf->Release();
return 0;
}
psf->Release();
if (ShellFunctions::StrRetToStr(str,lpiil,szName,dwBufferLen))
return istrlen(szName);
return 0;
}
示例3: GetItemIdName
HRESULT CFShellUtil::GetItemIdName( LPCITEMIDLIST pItemIdList, LPTSTR pFriendlyName, UINT cchBuf,
DWORD dwFlags, IShellFolder* pSF )
{
HRESULT hr = S_OK;
STRRET strRet = {0};
IShellFolder* pShellFolder = pSF;
if ( pShellFolder == NULL )
{
COM_VERIFY(SHGetDesktopFolder( &pShellFolder ));
if ( !pShellFolder )
{
return hr;
}
}
COM_VERIFY(pShellFolder->GetDisplayNameOf( pItemIdList, dwFlags, &strRet));
if (SUCCEEDED(hr))
{
COM_VERIFY(StrRetToBuf( &strRet, pItemIdList, pFriendlyName, cchBuf));
}
if ( NULL == pSF )
{
pShellFolder->Release();
pShellFolder = NULL;
}
return hr;
}
示例4: GetExplorerWindows
void GetExplorerWindows(std::vector<PairHwndPath>& windows, BOOL needPaths) {
IShellWindows *psw;
if(SUCCEEDED(CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_ALL, IID_IShellWindows, (void**)&psw))) {
VARIANT v;
V_VT(&v) = VT_I4;
IDispatch* pdisp;
for(V_I4(&v) = 0; psw->Item(v, &pdisp) == S_OK; V_I4(&v)++) {
IWebBrowserApp *pwba;
if(SUCCEEDED(pdisp->QueryInterface(IID_IWebBrowserApp, (void**)&pwba))) {
PairHwndPath pair;
if(SUCCEEDED(pwba->get_HWND((LONG_PTR*)&pair.hwnd))) {
IServiceProvider *psp;
if(needPaths && SUCCEEDED(pwba->QueryInterface(IID_IServiceProvider, (void**)&psp))) {
IShellBrowser *psb;
if(SUCCEEDED(psp->QueryService(SID_STopLevelBrowser, IID_IShellBrowser, (void**)&psb))) {
IShellView *psv;
if(SUCCEEDED(psb->QueryActiveShellView(&psv))) {
IFolderView *pfv;
if(SUCCEEDED(psv->QueryInterface(IID_IFolderView, (void**)&pfv))) {
IPersistFolder2 *ppf2;
if(SUCCEEDED(pfv->GetFolder(IID_IPersistFolder2, (void**)&ppf2))) {
LPITEMIDLIST pidlFolder;
if(SUCCEEDED(ppf2->GetCurFolder(&pidlFolder))) {
if(!SHGetPathFromIDList(pidlFolder, pair.path)) {
IShellFolder* psf;
LPCITEMIDLIST pidlLast;
if(SUCCEEDED(SHBindToParent(pidlFolder, IID_IShellFolder, (void**)&psf, &pidlLast))) {
STRRET strret;
if(SUCCEEDED(psf->GetDisplayNameOf(pidlLast, 0x8000, &strret))) {
StrRetToBuf(&strret, pidlLast, pair.path, MAX_PATH);
}
else {
pair.path[0] = 0;
}
psf->Release();
}
}
CoTaskMemFree(pidlFolder);
}
ppf2->Release();
}
pfv->Release();
}
psv->Release();
}
psb->Release();
}
psp->Release();
}
windows.push_back(pair);
}
pwba->Release();
}
pdisp->Release();
}
psw->Release();
}
}
示例5: DetermineItemTotalSizeGroup
/* TODO: These groups have changed as of Windows Vista. */
void CShellBrowser::DetermineItemTotalSizeGroup(int iItemInternal,TCHAR *szGroupHeader,int cchMax) const
{
IShellFolder *pShellFolder = NULL;
LPITEMIDLIST pidlComplete = NULL;
LPITEMIDLIST pidlDirectory = NULL;
LPITEMIDLIST pidlRelative = NULL;
TCHAR *SizeGroups[] = {_T("Unspecified"),_T("Small"),_T("Medium"),_T("Huge"),_T("Gigantic")};
TCHAR szItem[MAX_PATH];
STRRET str;
ULARGE_INTEGER nTotalBytes;
ULARGE_INTEGER nFreeBytes;
BOOL bRoot;
BOOL bRes = FALSE;
ULARGE_INTEGER TotalSizeGroupLimits[6];
int nGroups = 5;
int iSize = 0;
int i;
TotalSizeGroupLimits[0].QuadPart = 0;
TotalSizeGroupLimits[1].QuadPart = 0;
TotalSizeGroupLimits[2].QuadPart = GBYTE;
TotalSizeGroupLimits[3].QuadPart = 20 * TotalSizeGroupLimits[2].QuadPart;
TotalSizeGroupLimits[4].QuadPart = 100 * TotalSizeGroupLimits[2].QuadPart;
GetIdlFromParsingName(m_CurDir,&pidlDirectory);
pidlComplete = ILCombine(pidlDirectory,m_pExtraItemInfo[iItemInternal].pridl);
SHBindToParent(pidlComplete, IID_PPV_ARGS(&pShellFolder), (LPCITEMIDLIST *) &pidlRelative);
pShellFolder->GetDisplayNameOf(pidlRelative,SHGDN_FORPARSING,&str);
StrRetToBuf(&str,pidlRelative,szItem,SIZEOF_ARRAY(szItem));
bRoot = PathIsRoot(szItem);
if(bRoot)
{
bRes = GetDiskFreeSpaceEx(szItem,NULL,&nTotalBytes,&nFreeBytes);
CoTaskMemFree(pidlDirectory);
CoTaskMemFree(pidlComplete);
pShellFolder->Release();
i = nGroups - 1;
while(nTotalBytes.QuadPart < TotalSizeGroupLimits[i].QuadPart && i > 0)
i--;
iSize = i;
}
if(!bRoot || !bRes)
{
iSize = 0;
}
StringCchCopy(szGroupHeader,cchMax,SizeGroups[iSize]);
}
示例6: DetermineItemFreeSpaceGroup
/* TODO: Need to sort based on percentage free. */
void CShellBrowser::DetermineItemFreeSpaceGroup(int iItemInternal,TCHAR *szGroupHeader,int cchMax) const
{
std::list<TypeGroup_t>::iterator itr;
LPITEMIDLIST pidlComplete = NULL;
LPITEMIDLIST pidlDirectory = NULL;
TCHAR szFreeSpace[MAX_PATH];
IShellFolder *pShellFolder = NULL;
LPITEMIDLIST pidlRelative = NULL;
STRRET str;
TCHAR szItem[MAX_PATH];
ULARGE_INTEGER nTotalBytes;
ULARGE_INTEGER nFreeBytes;
BOOL bRoot;
BOOL bRes = FALSE;
GetIdlFromParsingName(m_CurDir,&pidlDirectory);
pidlComplete = ILCombine(pidlDirectory,m_pExtraItemInfo[iItemInternal].pridl);
SHBindToParent(pidlComplete, IID_PPV_ARGS(&pShellFolder), (LPCITEMIDLIST *)&pidlRelative);
pShellFolder->GetDisplayNameOf(pidlRelative,SHGDN_FORPARSING,&str);
StrRetToBuf(&str,pidlRelative,szItem,SIZEOF_ARRAY(szItem));
CoTaskMemFree(pidlDirectory);
CoTaskMemFree(pidlComplete);
pShellFolder->Release();
bRoot = PathIsRoot(szItem);
if(bRoot)
{
bRes = GetDiskFreeSpaceEx(szItem,NULL,&nTotalBytes,&nFreeBytes);
LARGE_INTEGER lDiv1;
LARGE_INTEGER lDiv2;
lDiv1.QuadPart = 100;
lDiv2.QuadPart = 10;
/* Divide by 10 to remove the one's digit, then multiply
by 10 so that only the ten's digit rmains. */
StringCchPrintf(szFreeSpace,SIZEOF_ARRAY(szFreeSpace),
_T("%I64d%% free"),(((nFreeBytes.QuadPart * lDiv1.QuadPart) / nTotalBytes.QuadPart) / lDiv2.QuadPart) * lDiv2.QuadPart);
}
if(!bRoot || !bRes)
{
StringCchCopy(szFreeSpace,SIZEOF_ARRAY(szFreeSpace),_T("Unspecified"));
}
StringCchCopy(szGroupHeader,cchMax,szFreeSpace);
}
示例7: jstringFromSTRRET
/*
* Class: sun_awt_shell_Win32ShellFolder
* Method: getFileSystemPath
* Signature: (JJ)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder_getFileSystemPath__JJ
(JNIEnv* env, jclass cls, jlong parentIShellFolder, jlong relativePIDL)
{
IShellFolder* pParent = (IShellFolder*)parentIShellFolder;
if (pParent == NULL) {
return NULL;
}
LPITEMIDLIST pidl = (LPITEMIDLIST)relativePIDL;
if (pidl == NULL) {
return NULL;
}
STRRET strret;
pParent->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &strret);
return jstringFromSTRRET(env, pidl, &strret);
}
示例8: lana_ShellGetNameFromGuidW
// Use the IShellFolder API to get the connection name for the given Guid.
static HRESULT lana_ShellGetNameFromGuidW(WCHAR *wGuid, WCHAR *wName, int NameSize)
{
// This is the GUID for the network connections folder. It is constant.
// {7007ACC7-3202-11D1-AAD2-00805FC1270E}
const GUID CLSID_NetworkConnections = {
0x7007ACC7, 0x3202, 0x11D1, {
0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E
}
};
LPITEMIDLIST pidl;
IShellFolder *pShellFolder;
IMalloc *pShellMalloc;
// Build the display name in the form "::{GUID}".
if (wcslen(wGuid) >= MAX_PATH)
return E_INVALIDARG;
WCHAR szAdapterGuid[MAX_PATH + 2];
swprintf(szAdapterGuid, L"::%ls", wGuid);
// Initialize COM.
CoInitialize(NULL);
// Get the shell allocator.
HRESULT hr = SHGetMalloc(&pShellMalloc);
if (SUCCEEDED(hr))
{
// Create an instance of the network connections folder.
hr = CoCreateInstance(CLSID_NetworkConnections, NULL,
CLSCTX_INPROC_SERVER, IID_IShellFolder,
reinterpret_cast<LPVOID *>(&pShellFolder));
}
if (SUCCEEDED(hr))
{
hr = pShellFolder->ParseDisplayName(NULL, NULL, szAdapterGuid, NULL,
&pidl, NULL);
}
if (SUCCEEDED(hr)) {
// Get the display name; this returns the friendly name.
STRRET sName;
hr = pShellFolder->GetDisplayNameOf(pidl, SHGDN_NORMAL, &sName);
if (SUCCEEDED(hr))
wcsncpy(wName, sName.pOleStr, NameSize);
pShellMalloc->Free(pidl);
}
CoUninitialize();
return hr;
}
示例9: DetermineItemFileSystemGroup
void CShellBrowser::DetermineItemFileSystemGroup(int iItemInternal,TCHAR *szGroupHeader,int cchMax) const
{
LPITEMIDLIST pidlComplete = NULL;
IShellFolder *pShellFolder = NULL;
LPITEMIDLIST pidlRelative = NULL;
TCHAR szFileSystemName[MAX_PATH];
TCHAR szItem[MAX_PATH];
STRRET str;
BOOL bRoot;
BOOL bRes;
pidlComplete = ILCombine(m_pidlDirectory,m_pExtraItemInfo[iItemInternal].pridl);
SHBindToParent(pidlComplete, IID_PPV_ARGS(&pShellFolder), (LPCITEMIDLIST *)&pidlRelative);
pShellFolder->GetDisplayNameOf(pidlRelative,SHGDN_FORPARSING,&str);
StrRetToBuf(&str,pidlRelative,szItem,SIZEOF_ARRAY(szItem));
bRoot = PathIsRoot(szItem);
if(bRoot)
{
bRes = GetVolumeInformation(szItem,NULL,0,NULL,NULL,NULL,szFileSystemName,
SIZEOF_ARRAY(szFileSystemName));
if(!bRes || *szFileSystemName == '\0')
{
/* TODO: Move into string table. */
StringCchCopy(szFileSystemName,SIZEOF_ARRAY(szFileSystemName),_T("Unspecified"));
}
}
else
{
/* TODO: Move into string table. */
StringCchCopy(szFileSystemName,SIZEOF_ARRAY(szFileSystemName),_T("Unspecified"));
}
StringCchCopy(szGroupHeader,cchMax,szFileSystemName);
pShellFolder->Release();
CoTaskMemFree(pidlComplete);
}
示例10: GetSpeacialFolderLocation
CString GetSpeacialFolderLocation(int csidl)
{
IShellFolder *desktop;
LPITEMIDLIST pidl;
STRRET strRet;
if(FAILED(SHGetDesktopFolder(&desktop)))
{
return L"";
}
if(FAILED(SHGetSpecialFolderLocation(NULL, csidl, &pidl)))
{
return L"";
}
if(FAILED(desktop->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strRet)))
{
return L"";
}
if(pidl)
{
ILFree(pidl);
}
return strRet.pOleStr;
}
示例11: OnFileActionAdded
void CShellBrowser::OnFileActionAdded(const TCHAR *szFileName)
{
IShellFolder *pShellFolder = NULL;
LPITEMIDLIST pidlFull = NULL;
LPITEMIDLIST pidlRelative = NULL;
Added_t Added;
TCHAR FullFileName[MAX_PATH];
TCHAR szDisplayName[MAX_PATH];
STRRET str;
BOOL bFileAdded = FALSE;
HRESULT hr;
StringCchCopy(FullFileName,SIZEOF_ARRAY(FullFileName),m_CurDir);
PathAppend(FullFileName,szFileName);
hr = GetIdlFromParsingName(FullFileName,&pidlFull);
/* It is possible that by the time a file is registered here,
it will have already been renamed. In this the following
check will fail.
If the file is not added, store its filename. */
if(SUCCEEDED(hr))
{
hr = SHBindToParent(pidlFull, IID_PPV_ARGS(&pShellFolder), (LPCITEMIDLIST *)&pidlRelative);
if(SUCCEEDED(hr))
{
/* If this is a virtual folder, only use SHGDN_INFOLDER. If this is
a real folder, combine SHGDN_INFOLDER with SHGDN_FORPARSING. This is
so that items in real folders can still be shown with extensions, even
if the global, Explorer option is disabled. */
if(m_bVirtualFolder)
hr = pShellFolder->GetDisplayNameOf(pidlRelative,SHGDN_INFOLDER,&str);
else
hr = pShellFolder->GetDisplayNameOf(pidlRelative,SHGDN_INFOLDER|SHGDN_FORPARSING,&str);
if(SUCCEEDED(hr))
{
StrRetToBuf(&str,pidlRelative,szDisplayName,SIZEOF_ARRAY(szDisplayName));
std::list<DroppedFile_t>::iterator itr;
BOOL bDropped = FALSE;
if(!m_DroppedFileNameList.empty())
{
for(itr = m_DroppedFileNameList.begin();itr != m_DroppedFileNameList.end();itr++)
{
if(lstrcmp(szDisplayName,itr->szFileName) == 0)
{
bDropped = TRUE;
break;
}
}
}
/* Only insert the item in its sorted position if it
wasn't dropped in. */
if(m_bInsertSorted && !bDropped)
{
int iItemId;
int iSorted;
iItemId = SetItemInformation(m_pidlDirectory,pidlRelative,szDisplayName);
iSorted = DetermineItemSortedPosition(iItemId);
AddItemInternal(iSorted,iItemId,TRUE);
}
else
{
/* Just add the item to the end of the list. */
AddItemInternal(m_pidlDirectory,pidlRelative,szDisplayName,-1,FALSE);
}
InsertAwaitingItems(m_bShowInGroups);
bFileAdded = TRUE;
}
pShellFolder->Release();
}
CoTaskMemFree(pidlFull);
}
if(!bFileAdded)
{
/* The file does not exist. However, it is possible
that is was simply renamed shortly after been created.
Record the filename temporarily (so that it can later
be added). */
StringCchCopy(Added.szFileName,SIZEOF_ARRAY(Added.szFileName),szFileName);
m_FilesAdded.push_back(Added);
}
}
示例12: DragQueryFile
/////////////////////////////////////////////////////////////////////////////
// IShellInit Functions
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CShellExt::XShellInit::Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdobj, HKEY hkeyProgID)
{
METHOD_PROLOGUE(CShellExt, ShellInit);
HRESULT hres = E_FAIL;
FORMATETC fmte = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
STGMEDIUM medium;
// We must have a data object
if ((pdobj == NULL) && (pidlFolder == NULL))
return E_FAIL;
pThis->m_bIsSymlink=false;
pThis->m_bIsMountpoint=false;
pThis->m_bIsPathInAFS=false;
pThis->m_bDirSelected=false;
if (pdobj) {
// Use the given IDataObject to get a list of filenames (CF_HDROP)
hres = pdobj->GetData(&fmte, &medium);
if (FAILED(hres)) {
return E_FAIL;
}
int nNumFiles = DragQueryFile((HDROP)medium.hGlobal, 0xFFFFFFFF, NULL, 0);
if (nNumFiles == 0)
hres = E_FAIL;
else {
pThis->m_bDirSelected = FALSE;
for (int ii = 0; ii < nNumFiles; ii++) {
CString strFileName;
// Get the size of the file name string
int nNameLen = DragQueryFile((HDROP)medium.hGlobal, ii, 0, 0);
// Make room for it in our string object
LPTSTR pszFileNameBuf = strFileName.GetBuffer(nNameLen + 1); // +1 for the terminating NULL
ASSERT(pszFileNameBuf);
// Get the file name
DragQueryFile((HDROP)medium.hGlobal, ii, pszFileNameBuf, nNameLen + 1);
strFileName.ReleaseBuffer();
if (!IsPathInAfs(strFileName)) {
pThis->m_astrFileNames.RemoveAll();
pThis->m_bIsPathInAFS=false;
break;
} else {
pThis->m_bIsSymlink=pThis->m_bIsSymlink||IsSymlink(strFileName);
pThis->m_bIsMountpoint=pThis->m_bIsMountpoint||IsMountPoint(strFileName);
pThis->m_bIsPathInAFS=true;
}
if (IsADir(strFileName))
pThis->m_bDirSelected = TRUE;
pThis->m_astrFileNames.Add(strFileName);
}
// Release the data
ReleaseStgMedium(&medium);
}
}
if ((pThis->m_astrFileNames.GetSize() == 0)&&(pidlFolder)) {
// if there are no valid files selected, try the folder background
IShellFolder *parentFolder = NULL;
STRRET name;
TCHAR * szDisplayName = NULL;
hres = ::SHGetDesktopFolder(&parentFolder);
if (FAILED(hres))
return hres;
hres = parentFolder->GetDisplayNameOf(pidlFolder, SHGDN_NORMAL | SHGDN_FORPARSING, &name);
if (FAILED(hres)) {
parentFolder->Release();
return hres;
}
hres = StrRetToStr (&name, pidlFolder, &szDisplayName);
if (FAILED(hres))
return hres;
parentFolder->Release();
if (szDisplayName) {
pThis->m_bDirSelected = TRUE;
CString strFileName = CString(szDisplayName);
if (IsPathInAfs(strFileName)) {
pThis->m_bIsSymlink=IsSymlink(strFileName);
pThis->m_bIsMountpoint=IsMountPoint(strFileName);
pThis->m_bIsPathInAFS=true;
pThis->m_astrFileNames.Add(strFileName);
}
CoTaskMemFree(szDisplayName);
}
}
if (pThis->m_astrFileNames.GetSize() > 0)
hres = NOERROR;
//.........这里部分代码省略.........
示例13: Rename
//.........这里部分代码省略.........
CRenameDlg dlg(hwnd);
dlg.SetFileList(m_filelist);
if (dlg.DoModal(g_hInst, IDD_RENAMEDLG, hwnd, NULL) == IDOK)
{
try
{
const std::tr1::wregex regCheck(dlg.GetMatchString(), dlg.GetRegexFlags());
NumberReplaceHandler handler(dlg.GetReplaceString());
// start renaming the files
IServiceProvider * pServiceProvider = NULL;
if (SUCCEEDED(GetIServiceProvider(hwnd, &pServiceProvider)))
{
IShellBrowser * pShellBrowser;
if (SUCCEEDED(pServiceProvider->QueryService(SID_SShellBrowser, IID_IShellBrowser, (LPVOID*)&pShellBrowser)))
{
IShellView * pShellView;
if (SUCCEEDED(pShellBrowser->QueryActiveShellView(&pShellView)))
{
IFolderView * pFolderView;
if (SUCCEEDED(pShellView->QueryInterface(IID_IFolderView, (LPVOID*)&pFolderView)))
{
// hooray! we got the IFolderView interface!
// that means the explorer is active and well :)
// but we also need the IShellFolder interface because
// we need its GetDisplayNameOf() method
IPersistFolder2 * pPersistFolder;
if (SUCCEEDED(pFolderView->GetFolder(IID_IPersistFolder2, (LPVOID*)&pPersistFolder)))
{
IShellFolder * pShellFolder;
if (SUCCEEDED(pPersistFolder->QueryInterface(IID_IShellFolder, (LPVOID*)&pShellFolder)))
{
// our next task is to enumerate all the
// items in the folder view and select those
// which match the text in the edit control
int nCount = 0;
if (SUCCEEDED(pFolderView->ItemCount(SVGIO_ALLVIEW, &nCount)))
{
for (int i=0; i<nCount; ++i)
{
LPITEMIDLIST pidl;
if (SUCCEEDED(pFolderView->Item(i, &pidl)))
{
STRRET str;
if (SUCCEEDED(pShellFolder->GetDisplayNameOf(pidl,
// SHGDN_FORPARSING needed to get the extensions even if they're not shown
SHGDN_INFOLDER|SHGDN_FORPARSING,
&str)))
{
TCHAR dispname[MAX_PATH];
StrRetToBuf(&str, pidl, dispname, _countof(dispname));
std::wstring replaced;
try
{
std::wstring sDispName = dispname;
// check if the item is in the list of selected items
if (m_filelist.find(sDispName) != m_filelist.end())
{
replaced = std::tr1::regex_replace(sDispName, regCheck, dlg.GetReplaceString());
replaced = handler.ReplaceCounters(replaced);
if (replaced.compare(sDispName))
{
ITEMIDLIST * pidlrenamed;
pShellFolder->SetNameOf(NULL, pidl, replaced.c_str(), SHGDN_FORPARSING|SHGDN_INFOLDER, &pidlrenamed);
// if the rename was successful, select the renamed item
if (pidlrenamed)
pFolderView->SelectItem(i, SVSI_CHECK|SVSI_SELECT);
}
}
}
catch (std::exception)
{
}
}
CoTaskMemFree(pidl);
}
}
}
pShellFolder->Release();
}
pPersistFolder->Release();
}
pFolderView->Release();
}
pShellView->Release();
}
pShellBrowser->Release();
}
pServiceProvider->Release();
}
}
catch (std::exception)
{
}
}
m_bDialogShown = FALSE;
}
示例14: GetNethoodTarget
BOOL Network::GetNethoodTarget(LPCWSTR szFolder,LPWSTR szTarget,DWORD nBufferLen)
{
CStringW file(szFolder);
if (file.LastChar()!=L'\\')
file << L'\\';
file << L"desktop.ini";
WCHAR cls[300];
if (IsUnicodeSystem())
{
if (!GetPrivateProfileStringW(L".ShellClassInfo",L"CLSID2",szwEmpty,cls,300,file))
return FALSE;
}
else
{
char clsA[300];
if (!GetPrivateProfileString(".ShellClassInfo","CLSID2",szEmpty,clsA,300,W2A(file)))
return FALSE;
MultiByteToWideChar(CP_ACP,0,clsA,-1,cls,300);
}
if (wcscmp(cls,L"{0AFACED1-E828-11D1-9187-B532F1E9575D}")!=0)
return FALSE; // Folder shortcut
IShellLink* psl;
if (!SUCCEEDED(CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(void**)&psl)))
return FALSE;
IPersistFile* ppf;
if (!SUCCEEDED(psl->QueryInterface(IID_IPersistFile,(void**)&ppf)))
{
psl->Release();
return FALSE;
}
IShellFolder* psf;
if (!SUCCEEDED(SHGetDesktopFolder(&psf)))
{
ppf->Release();
psl->Release();
return FALSE;
}
file=szFolder;
if (file.LastChar()!=L'\\')
file << L'\\';
file << L"target.lnk";
BOOL bRet=FALSE;
if (SUCCEEDED(ppf->Load(file,0)))
{
LPITEMIDLIST il;
if (SUCCEEDED(psl->GetIDList(&il)))
{
STRRET str;
if (SUCCEEDED(psf->GetDisplayNameOf(il,SHGDN_FORPARSING,&str)))
{
if (ShellFunctions::StrRetToStr(str,il,szTarget,nBufferLen))
bRet=2;
}
else
{
SHDESCRIPTIONID di;
if (SUCCEEDED(SHGetDataFromIDList(psf,il,SHGDFIL_DESCRIPTIONID,&di,sizeof(SHDESCRIPTIONID))))
{
if (di.clsid==CLSID_NetworkPlaces)
{
if (SUCCEEDED(psf->GetDisplayNameOf(il,SHGDN_FORPARSING,&str)))
{
if (ShellFunctions::StrRetToStr(str,il,szTarget,nBufferLen))
bRet=szTarget[0]=='\\' && szTarget[1]=='\\';
}
}
}
}
CoTaskMemFree(il);
}
}
psf->Release();
ppf->Release();
psl->Release();
return bRet;
}
示例15: FilterFiles
void FileDialog::FilterFiles(HWND hDlg)
{
HWND parent = ::GetParent(hDlg);
IShellFolder *ishell = NULL;
LPMALLOC imalloc = NULL;
HRESULT hr;
// Get pointer to the ListView control
HWND lv = ::GetDlgItem(::GetDlgItem(parent, lst2), 1);
if (lv == NULL)
{
wxASSERT(lv != NULL);
return;
}
// Get shell's memory allocation interface (must be Release()'d)
hr = SHGetMalloc(&imalloc);
if ((hr != NOERROR) || (imalloc == NULL))
{
wxASSERT((hr == NOERROR) && (imalloc != NULL));
return;
}
// Init
LVITEM lvi;
wxZeroMemory(lvi);
// Process all items
int fltcnt = m_Filters.GetCount();
int itmcnt = ::SendMessage(lv, LVM_GETITEMCOUNT, 0, 0);
for (int itm = 0; itm < itmcnt; itm++)
{
// Retrieve the file IDL
lvi.iItem = itm;
lvi.mask = LVIF_PARAM;
if (ListView_GetItem(lv, &lvi) != TRUE)
{
wxASSERT(FALSE);
break;
}
LPCITEMIDLIST fidl = (LPCITEMIDLIST) lvi.lParam;
// Retrieve the IShellFolder interface of the parent (must be Release()'d)
if (ishell == NULL)
{
hr = SHBindToParent(fidl, IID_IShellFolder, (void **)&ishell, NULL);
if (!SUCCEEDED(hr))
{
wxASSERT(SUCCEEDED(hr));
break;
}
}
// Get the attributes of the object
DWORD attr = SFGAO_FOLDER | SFGAO_STREAM;
hr = ishell->GetAttributesOf(1, &fidl, &attr);
if (!SUCCEEDED(hr))
{
wxASSERT(SUCCEEDED(hr));
break;
}
// Allow all folders (things like zip files get filtered below)
if (attr == SFGAO_FOLDER)
{
continue;
}
// Retrieve the parsable name of the object (includes extension)
STRRET str;
hr = ishell->GetDisplayNameOf(fidl, SHGDN_INFOLDER | SHGDN_FORPARSING, &str);
if (hr != NOERROR)
{
// For some objects, we get back an error of 80070057. I'm assuming this
// means there is no way to represent the name (like some sort of virtual name)
// or I've not used the correct PIDL. But, in either case, it "probably"
// represents some sort of folder (at least in all cases I've seen), so we
// simply allow it to display.
continue;
}
// Convert result to wxString
wxString filename;
switch (str.uType)
{
case STRRET_WSTR:
filename = str.pOleStr;
imalloc->Free(str.pOleStr);
break;
case STRRET_OFFSET:
filename = wxString(((char *)fidl) + str.uOffset, wxConvISO8859_1);
break;
case STRRET_CSTR:
filename = wxString(str.cStr, wxConvISO8859_1);
break;
}
// Attempt to match it to all of our filters
//.........这里部分代码省略.........