Bueno pues si no hay una api para eso pues ni modo lo que pasa es que si se ponerle un icono a la aplicación pero lo que quería hacer era que apareciera la carpeta del sistema por defecto sea que si metiera mi aplicación en Windows XP saliera la carpeta de ese sistema y si metiera a Windows vista pues saliera en la aplicación la carpeta de Windows vista , pero pues ni modo. Sobre limpiar cadenas de texto utilice RtlZeroMemory y también funciono bien, y pues muchas gracias por las respuestas.
si que hay API para eso...
'ExtractAssociatedIcon ' extrae el icono asociado a un fichero.. recibe 3 parámetros
instancia= la aplicación que hace la llamada...
ruta= ruta del fichero o aplicación del que se quiere tomar el icono.
indexIcon =índice del icono a obtener, cuando es una aplicación retiene el identificador del icono.
Creo recordar que se encontraba en la librería shell32.dll Haz un export de las funciones de shell32.dll o 'guglea' un poco para obtener más info...
Luego puedes usar loadIcon, DestroyIcon, GetIconInfo, DrawIcon , etc ... para operar sobre él.
No obstante si lo vas a emplear para lo que señalas lo adecuado es que captures el icono una única vez y lo añadas como recurso en tu aplicación de instalación según detectes que sea XP o VISTA y no capturar en ese momento el icono...
Yo he usado
ExtractAssociatedIcon en alguna ocasión para precisamente obtener los iconos de aplicación para generar un treeview de asociación de extensiones... lo hacía más vistoso..