Método IShellFolder::P arseDisplayName (shobjidl_core.h)

Convierte el nombre para mostrar de un objeto de archivo o una carpeta en una lista de identificadores de elemento.

Sintaxis

HRESULT ParseDisplayName(
  [in]      HWND             hwnd,
  [in]      IBindCtx         *pbc,
  [in]      LPWSTR           pszDisplayName,
  [out]     ULONG            *pchEaten,
  [out]     PIDLIST_RELATIVE *ppidl,
  [in, out] ULONG            *pdwAttributes
);

Parámetros

[in] hwnd

Tipo: HWND

Identificador de ventana. El cliente debe proporcionar un identificador de ventana si muestra un cuadro de diálogo o un cuadro de mensaje. De lo contrario, establezca hwnd en NULL.

[in] pbc

Tipo: IBindCtx*

Opcional. Puntero a un contexto de enlace utilizado para pasar parámetros como entradas y salidas a la función de análisis. Estos parámetros pasados suelen ser específicos del origen de datos y los propietarios del origen de datos documentan. Por ejemplo, el origen de datos del sistema de archivos acepta el nombre que se analiza (como una estructura de WIN32_FIND_DATA ), mediante el parámetro de contexto de enlace de STR_FILE_SYS_BIND_DATA . STR_PARSE_PREFER_FOLDER_BROWSING se puede pasar para indicar que las direcciones URL se analizan mediante el origen de datos del sistema de archivos siempre que sea posible. Construya un objeto de contexto de enlace mediante CreateBindCtx y rellene los valores mediante IBindCtx::RegisterObjectParam. Consulte Bind Context String Keys (Enlazar claves de cadena de contexto ) para obtener una lista completa de estos.

Si no se pasan ni reciben datos de la función de análisis, este valor puede ser NULL.

[in] pszDisplayName

Tipo: LPWSTR

Cadena Unicode terminada en null con el nombre para mostrar. Dado que cada carpeta shell define su propia sintaxis de análisis, el formato que puede tomar esta cadena puede variar. La carpeta de escritorio, por ejemplo, acepta rutas de acceso como "C:\My Docs\My File.txt". También aceptará referencias a elementos del espacio de nombres que tienen un GUID asociado a ellos mediante la sintaxis "::{GUID}". Por ejemplo, para recuperar una lista de identificadores completa para el panel de control desde la carpeta de escritorio, puede usar lo siguiente:

::{CLSID for Control Panel}\::{CLSID for printers folder}

[out] pchEaten

Tipo: ULONG*

Puntero a un valor ULONG que recibe el número de caracteres del nombre para mostrar que se ha analizado. Si la aplicación no necesita esta información, establezca pchEaten en NULL y no se devolverá ningún valor.

[out] ppidl

Tipo: PIDLIST_RELATIVE*

Cuando este método devuelve , contiene un puntero al PIDL del objeto . La lista de identificadores de elemento devuelto especifica el elemento relativo a la carpeta de análisis. Si el objeto asociado a pszDisplayName está dentro de la carpeta de análisis, la lista de identificadores de elemento devuelto contendrá solo una estructura SHITEMID . Si el objeto está en una subcarpeta de la carpeta de análisis, la lista de identificadores de elemento devuelto contendrá varias estructuras SHITEMID . Si se produce un error, se devuelve NULL en esta dirección.

Cuando ya no es necesario, es responsabilidad del autor de la llamada liberar este recurso llamando a CoTaskMemFree.

[in, out] pdwAttributes

Tipo: ULONG*

Valor que se usa para consultar los atributos de archivo. Si no se usa, debe establecerse en NULL. Para consultar uno o varios atributos, inicialice este parámetro con las marcas SFGAO que representan los atributos de interés. Al devolver, se establecerán los atributos que son true y se solicitaron.

Valor devuelto

Tipo: HRESULT

Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

Es posible que algunas carpetas de Shell no implementen IShellFolder::P arseDisplayName. Cada carpeta que defina su propia sintaxis de análisis.

No se espera que ParseDisplayName controle la ruta de acceso relativa o los indicadores de carpeta primaria ("." o ".."). Depende del autor de la llamada quitarlos adecuadamente.

No use la marca de SFGAO_VALIDATE en pdwAttributes para comprobar la existencia del elemento cuyo nombre se está analizando. IShellFolder::P arseDisplayName valida implícitamente la existencia del elemento a menos que ese comportamiento se invalide mediante un parámetro de contexto de enlace especial.

La consulta de algunos atributos puede ser relativamente lenta y usar cantidades significativas de memoria. Por ejemplo, para determinar si se comparte un archivo, shell cargará los componentes de red. Este procedimiento puede requerir la carga de varios archivos DLL. El propósito de pdwAttributes es permitir restringir la consulta solo a esa información necesaria. En el fragmento de código siguiente se muestra cómo averiguar si un archivo está comprimido.

LPITEMIDLIST pidl;
ULONG cbEaten;
DWORD dwAttribs = SFGAO_COMPRESSED;

hres = psf->ParseDisplayName(NULL,
                             NULL,
                             lpwszDisplayName,
                             &cbEaten,  // This can be NULL
                             &pidl,
                             &dwAttribs);

if(dwAttribs & SFGAO_COMPRESSED)
{
    // Do something with the compressed file
}

Dado que pdwAttributes es un parámetro de in/out, siempre se debe inicializar. Si pasa un valor no inicializado, es posible que algunos de los bits se establezcan accidentalmente. IShellFolder::P arseDisplayName consultará los atributos correspondientes, lo que puede provocar retrasos o demandas de memoria no deseadas. Si no desea consultar atributos, establezca pdwAttributes en NULL para evitar un comportamiento impredecible.

Este método es similar al método IParseDisplayName::P arseDisplayName .

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado shobjidl_core.h (incluya Shobjidl.h)
Archivo DLL Shell32.dll (versión 4.0 o posterior)

Consulte también

IShellFolder

IShellFolder2

IShellFolder::GetAttributesOf

IShellLink