Modo de prueba:
LPMALLOC lpMalloc;
LPITEMIDLIST lpiDir;
LPSTR lpBuffer;
if(!SUCCEEDED(SHGetMalloc(&lpMalloc)))
{
return 1;
}
lpBuffer = (LPSTR)lpMalloc->Alloc(MAX_PATH);
if(lpBuffer == NULL)
{
lpMalloc->Release();
return 1;
};
if(!SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_APPLICATION,&lpiDir)))
{
lpMalloc->Free(lpBuffer);
lpMalloc->Release();
return 1;
}
if(!SHGetPathFromIDList(lpiDir,lpBuffer))
{
lpMalloc->Free(lpiDir);
lpMalloc->Free(lpBuffer);
lpMalloc->Release();
return 1;
}
lpMalloc->Free(lpiDir);
lpMalloc->Free(lpBuffer);
lpMalloc->Release();
El la documentación de ShellApi no especifica el identificador para la carpeta
Archivos de Programa, en ducumentaciones viejas seria 0x0024, pero no funcionó en mi plataforma, con 0x0026 funcionó correctamente:
#define CSIDL_APPLICATION 0x0026
El archivo de inclusión es:
#include <shlobj.h>