Compartir a través de


Método IExtractImage::GetLocation (shobjidl_core.h)

Obtiene una ruta de acceso a la imagen que se va a extraer.

Sintaxis

HRESULT GetLocation(
  [out]     LPWSTR     pszPathBuffer,
  [in]      DWORD      cch,
  [out]     DWORD      *pdwPriority,
  [in]      const SIZE *prgSize,
  [in]      DWORD      dwRecClrDepth,
  [in, out] DWORD      *pdwFlags
);

Parámetros

[out] pszPathBuffer

Tipo: LPWSTR

Búfer usado para devolver la descripción de la ruta de acceso. Este valor identifica la imagen para que pueda evitar cargar la misma más de una vez.

[in] cch

Tipo: DWORD

Tamaño de pszPathBuffer en caracteres.

[out] pdwPriority

Tipo: DWORD*

No se usa.

Microsoft Windows XP y versiones anteriores: Puntero utilizado para devolver la prioridad del elemento cuando la marca de IEIFLAG_ASYNC se establece en pdwFlags. Este parámetro no debe ser NULL. Se produce un error en la función si este parámetro es NULL, ya sea IEIFLAG_ASYNC marca está establecida o no.

Este parámetro se usa normalmente para indicar la cantidad de tiempo necesario para extraer la imagen. Si desea tener más control sobre el orden en el que se extraen las miniaturas, puede definir varios niveles de prioridad, hasta 32 bits. Siempre que los valores enteros asignados a los distintos niveles de prioridad aumenten de baja a alta prioridad, los números reales que use no son importantes. Solo se usan para determinar el orden en que se extraerán las imágenes. Hay tres niveles de prioridad estándar:

IEI_PRIORITY_MAX

Prioridad máxima.

IEI_PRIORITY_MIN

Prioridad mínima.

IEIT_PRIORITY_NORMAL

Prioridad normal.

Microsoft Windows XP. No se usa.

[in] prgSize

Tipo: const SIZE*

Puntero a una estructura SIZE con el ancho y alto deseados de la imagen. No debe ser NULL.

[in] dwRecClrDepth

Tipo: DWORD

Profundidad de color recomendada en unidades de bits por píxel. No debe ser NULL.

[in, out] pdwFlags

Tipo: DWORD*

Marcas que especifican cómo se va a controlar la imagen. El valor debe ser uno o varios de los siguientes:

IEIFLAG_ASPECT

Se usa para pedir al objeto que use la relación de aspecto proporcionada. Si se establece esta marca, se pasará un rectángulo con la relación de aspecto deseada en prgSize. Esta marca no se puede usar con IEIFLAG_SCREEN.

IEIFLAG_ASYNC

No se usa. La miniatura siempre se extrae en un subproceso en segundo plano.

Microsoft Windows XP y versiones anteriores. Se usa para preguntar si esta instancia admite la extracción asincrónica (sin subprocesos). Si las aplicaciones que llaman establecen esta marca, IExtractImage::GetLocation puede devolver E_PENDING, lo que indica a la aplicación que realiza la llamada para extraer la imagen en otro subproceso. Si se devuelve E_PENDING , se devuelve la prioridad del elemento en pdwPriority.

IEIFLAG_CACHE

No compatible.

Windows XP y versiones anteriores: Establezca por el objeto para indicar que no almacenará en caché la imagen. Si se devuelve esta marca, shell almacenará en caché una copia de la imagen.

IEIFLAG_GLEAM

No compatible.

IEIFLAG_NOBORDER (0x0100)

No compatible.

IEIFLAG_NOSTAMP (0x0080)

No compatible.

IEIFLAG_OFFLINE

Se usa para indicar al objeto que use solo el contenido local para la representación.

IEIFLAG_ORIGSIZE

Versión 5.0. Se usa para indicar al objeto que represente la imagen al tamaño aproximado pasado en prgSize, pero recortarla si es necesario.

IEIFLAG_QUALITY (0x0200)

Se pasa al método IExtractImage::Extract para indicar que se solicita una imagen de mayor calidad.

Si no se establece esta marca, IExtractImage recupera una miniatura incrustada si el archivo tiene uno, independientemente del tamaño que solicite el usuario. Por ejemplo, si el archivo es de 2000 x 2000 píxeles, pero la miniatura incrustada es de solo 100 x 1000 píxeles y el usuario no establece esta marca, pero solicita una miniatura de 1000 x 1000 píxeles, IExtractImage siempre devuelve la miniatura de 100 x 1000 píxeles. Esto es por diseño, ya que IExtractImage no escala verticalmente. Si se desea una miniatura mayor (normalmente las miniaturas incrustadas son de 160 x 160), se debe establecer esta marca.

IEIFLAG_REFRESH (0x0400)

Devuelto por el objeto para indicar que Refresh Thumbnail debe mostrarse en el menú contextual del elemento.

IEIFLAG_SCREEN

Se usa para indicar al objeto que se represente como si fuera para la pantalla. Esta marca no se puede usar con IEIFLAG_ASPECT.

Valor devuelto

Tipo: HRESULT

Este método puede devolver un código de error definido por COM o uno de los siguientes:

Código devuelto Descripción
S_OK
Correcto
E_PENDING
Windows XP y versiones anteriores: Si se establece la marca IEIFLAG_ASYNC , este valor devuelto se usa para indicar al Shell que el objeto está libremente subproceso.

Comentarios

Microsoft Windows XP y versiones anteriores: Este método devuelve la ruta de acceso a una imagen y especifica cómo se debe representar la imagen. IExtractImage::GetLocation es un subproceso libre, es decir, admite el modelo de apartamento multiproceso (MTA), por lo que se puede colocar en un subproceso en segundo plano. El objeto también debe exponer una interfaz IRunnableTask , por lo que la aplicación que realiza la llamada puede iniciar y detener el proceso de extracción según sea necesario.

Debe devolver imágenes que se ajusten a los límites definidos por prgSize. Con los sistemas Windows 2000 y versiones posteriores, puedes establecer IEIFLAG_ORIGSIZE para usar objetos que no tengan una relación de aspecto estándar y se mostrarán correctamente. No es necesario rellenar la parte sin usar del rectángulo. Si intenta usar una imagen de relación de aspecto no estándar con versiones anteriores de Shell, se extenderá para ajustarse al rectángulo prgSize . Dependiendo de cuánto difiere la relación de aspecto de lo especificado, la imagen puede estar distorsionada de forma grave.

Requisitos

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