Además de lo anterior he implementado otras tres funciones que a lo mejor te pueden ser de utilidad.
- Code: Select all Expand view
HB_FUNC( READICONFILE ) // ReadIconFile( LPSTR cFile, BOOL lSmall, BOOL lOpen )
{
SHFILEINFO sfi ;
UINT uFlag = SHGFI_ICON + IF( hb_parl( 2 ), SHGFI_SMALLICON, SHGFI_LARGEICON ) + IF( hb_parl( 3 ), SHGFI_OPENICON, 0 ) + 0x000000020 ;
ZeroMemory(&sfi, sizeof(SHFILEINFO) ) ;
SHGetFileInfo( ( LPCTSTR ) hb_parc(1), 0, &sfi, sizeof(SHFILEINFO), uFlag ) ;
hb_retnl( ( LONG ) sfi.hIcon ) ;
}
Esta función me devuelve el icono del fichero, carpeta, o dispositivo que Windows utiliza en su Shell.
- cFile es el nombre del fichero, Directorio o dispositivo; este último en formato "c:\".
- lSmall .T. si queremos el icono de 16X16, .F. el de ¿32X32?
- lOpen .T. si queremos el icono correspondiente a carpeta abierta. .F. la cerrada (según versión del Windows son iguales).
- Code: Select all Expand view
HB_FUNC( READTIPEFILE ) // ReadTipeFile( LPSTR cFile )
{
SHFILEINFO sfi ;
ZeroMemory(&sfi, sizeof(SHFILEINFO) ) ;
SHGetFileInfo( ( LPCTSTR ) hb_parc(1), 0, &sfi, sizeof(SHFILEINFO), SHGFI_TYPENAME ) ;
hb_retc( sfi.szTypeName ) ;
}
Esta función devuelve la expresión "tipo de fichero" que Windows utiliza en su Shell.
- cFile es el nombre del fichero, Directorio o dispositivo; este último en formato "c:\".
- Code: Select all Expand view
HB_FUNC( READICONTIPEFILE ) // ReadIconTipeFile( LPSTR cFile, BOOL lSmall )
{
SHFILEINFO sfi ;
UINT uFlag = SHGFI_ICON + IF( hb_parl( 2 ), SHGFI_SMALLICON, SHGFI_LARGEICON ) + SHGFI_TYPENAME + SHGFI_DISPLAYNAME ;
ZeroMemory(&sfi, sizeof(SHFILEINFO) ) ;
SHGetFileInfo( ( LPCTSTR ) hb_parc(1), 0, &sfi, sizeof(SHFILEINFO), uFlag ) ;
hb_reta(3) ;
hb_stornl( ( LONG ) sfi.hIcon, -1, 1 ) ;
hb_storc( sfi.szTypeName, -1, 2 ) ;
hb_storc( sfi.szDisplayName, -1, 3 ) ;
}
Esta función devuelve un array con 1-Icono, 2-Tipo, 3-Nombre del fichero, Directorio o dispositivo como aparece en el Shell de Windows.
- cFile es el nombre del fichero, Directorio o dispositivo; este último en formato "c:\".
- lSmall .T. si queremos el icono de 16X16, .F. el de ¿32X32?
Saludos.