Compartir a través de


Método IShellFolder::CompareIDs (shobjidl_core.h)

Determina el orden relativo de dos objetos de archivo o carpetas, dadas sus listas de identificadores de elementos.

Sintaxis

HRESULT CompareIDs(
  [in] LPARAM             lParam,
  [in] PCUIDLIST_RELATIVE pidl1,
  [in] PCUIDLIST_RELATIVE pidl2
);

Parámetros

[in] lParam

Tipo: LPARAM

Valor que especifica cómo se debe realizar la comparación.

Los dieciséis bits inferiores de lParam definen la regla de ordenación. La mayoría de las aplicaciones establecen la regla de ordenación en el valor predeterminado de cero, lo que indica que los dos elementos deben compararse por nombre. El sistema no define ninguna otra regla de ordenación. Algunos objetos de carpeta pueden permitir que las aplicaciones que llaman usen los dieciséis bits inferiores de lParam para especificar reglas de ordenación específicas de carpetas. Las reglas y sus valores lParam asociados se definen mediante la carpeta .

Cuando el objeto de vista de carpetas del sistema llama a IShellFolder::CompareIDs, se usan los dieciséis bits inferiores de lParam para especificar la columna que se usará para la comparación.

Los dieciséis bits superiores de lParam se usan para marcas que modifican la regla de ordenación. Actualmente, el sistema define estas marcas modificadores.

SHCIDS_ALLFIELDS

Versión 5.0. Compare toda la información contenida en la estructura ITEMIDLIST , no solo los nombres para mostrar. Esta marca solo es válida para los objetos de carpeta que admiten la interfaz IShellFolder2 . Por ejemplo, si los dos elementos son archivos, la carpeta debe comparar sus nombres, tamaños, tiempos de archivo, atributos y cualquier otra información de las estructuras. Si se establece esta marca, los dieciséis bits inferiores de lParam deben ser cero.

SHCIDS_CANONICALONLY

Versión 5.0. Al comparar por nombre, compare los nombres del sistema, pero no los nombres para mostrar. Cuando se pasa esta marca, los dos elementos se comparan con los criterios que determina la carpeta shell son más eficaces, siempre y cuando implemente una función de ordenación coherente. Esta marca es útil al comparar la igualdad o cuando los resultados de la ordenación no se muestran al usuario. Esta marca no se puede combinar con otras marcas.

[in] pidl1

Tipo: PCUIDLIST_RELATIVE

Puntero a la estructura ITEMIDLIST del primer elemento. Será relativa a la carpeta . Esta estructura ITEMIDLIST puede contener más de un elemento; por lo tanto, se debe comparar toda la estructura, no solo el primer elemento.

[in] pidl2

Tipo: PCUIDLIST_RELATIVE

Puntero a la estructura ITEMIDLIST del segundo elemento. Será relativa a la carpeta . Esta estructura ITEMIDLIST puede contener más de un elemento; por lo tanto, se debe comparar toda la estructura, no solo el primer elemento.

Valor devuelto

Tipo: HRESULT

Si este método se ejecuta correctamente, el campo CODE del HRESULT contiene uno de los valores siguientes. Para obtener información sobre la extracción del campo CODE del HRESULT devuelto, vea Comentarios. Si este método no se realiza correctamente, devuelve un código de error COM.

Código devuelto Descripción
Negativo
Un valor devuelto negativo indica que el primer elemento debe preceder al segundo (pidl1 < pidl2).
Positivo
Un valor devuelto positivo indica que el primer elemento debe seguir el segundo (pidl1 > pidl2).
Cero
Un valor devuelto de cero indica que los dos elementos son iguales (pidl1 = pidl2).

Comentarios

Nota para llamar a aplicaciones

No establezca la marca SHCIDS_ALLFIELDS en lParam si el objeto folder no admite IShellFolder2. Si lo hace, podría tener resultados imprevisibles. Si usa la marca SHCIDS_ALLFIELDS , los dieciséis bits inferiores de lParam deben establecerse en cero.

Use la macro HRESULT_CODE para extraer el campo CODE del HRESULT y, a continuación, convierta el resultado como un short.

HRESULT hres = psf->CompareIDs(lParam, pidl1, pidl2);
if ((short)HRESULT_CODE(hres) < 0)
   { /* pidl1 comes first */ }
else if ((short)HRESULT_CODE(hres) > 0) 
   { /* pidl2 comes first */ }
else 
   { /* the two pidls are equal */ }

Nota para los implementadores

Para extraer la regla de ordenación, use un operador AND bit a bit (&) para combinar lParam con SHCIDS_COLUMNMASK (0X0000FFFF). Esta operación enmascara los dieciséis bits superiores de lParam, incluido el valor de SHCIDS_ALLFIELDS .

La macro MAKE_HRESULT es útil para construir el valor devuelto para una implementación del método CompareIDs. Por ejemplo:

HRESULT CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
{
    short sResult;
    unsigned uSeverity = 0x000000000;
    
    // Code that determines the relative order of pidl1 and pidl2 according to
    // any sorting rules specified by lParam goes here.
    //
    // Set sResult = -1 if pidl1 precedes pidl2 (pidl1 < pidl2).
    // Set sResult =  1 if pidl1 follows pidl2. (pidl1 > pidl2).
    // Set sResult =  0 if pidl1 and pidl2 are equivalent in terms of ordering. (pidl1 = pidl2).
    //
    // Leave uSeverity = 0 if the order is successfully determined.
    // Set uSeverity = 0x00000001 if there is an error.

    return MAKE_HRESULT(uSeverity, 0, (unsigned short)sResult);
}

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 (include Shobjidl.h)
Archivo DLL Shell32.dll (versión 4.0 o posterior)

Consulte también

IShellFolder

IShellFolder2