PRB: IShellFolder::GetDisplayNameOf Returns Names with GUIDs (198871)



The information in this article applies to:

  • Microsoft Platform Software Development Kit (SDK) 1.0, when used with:
    • the operating system: Microsoft Windows NT
    • the operating system: Microsoft Windows 2000

This article was previously published under Q198871

SYMPTOMS

On Windows 2000, calling the desktop's IShellFolder::GetDisplayNameOf with SHGDN_FORPARSING for a namespace extension returns a name with GUIDs in it rather than actual display names.

For example, the following code:
LPITEMIDLIST   pidl = NULL;

SHGetSpecialFolderLocation(NULL, CSIDL_CONTROLS, &pidl);

if(pidl)
   {
   IShellFolder   *pDesktop;

   SHGetDesktopFolder(&pDesktop);
   if(pDesktop)
      {
      STRRET   str;
      TCHAR    szText[MAX_PATH];

      pDesktop->GetDisplayNameOf(   pidl, 
                                    SHGDN_FORPARSING, 
                                    &str);

      pDesktop->Release();
      }
   }
				
returns a name such as:

::{<GUID for My Computer>}\{<GUID for Control Panel>}

rather than the following expected text:

Control Panel

Some folders may return a name such as:

My Computer\::{GUID for the requested item}

instead of returning the GUID for "My Computer."

CAUSE

This behavior is due to a design change in the Windows 2000 desktop.

RESOLUTION

To retrieve the actual display text, you need to add the SHGDN_FORADDRESSBAR flag to the SHGDN_FORPARSING flag. If this is done in the sample code above, the text returned will be:

Control Panel

STATUS

This behavior is by design.

Modification Type:MinorLast Reviewed:7/11/2005
Keywords:kbNameSpace kbprb KB198871