De C++, en cuanto a momento de escribir esto, Microsoft recomienda utilizar SHGetKnownFolderPath
con valor deseado de KNOWNFOLDERID
enum.El valor que necesita usar es FOLDERID_CommonStartMenu
. En su caso, el código se vería así:
wchar_t * path = nullptr;
const auto result = SHGetKnownFolderPath(FOLDERID_CommonStartMenu, 0, NULL, &path);
if (S_OK == result)
{
// do what you want with path, f.ex. create string from it
std::wstring pathAsString(path);
// according to documentation, calling process is responsible for freeing this resource
CoTaskMemFree(path);
}
Referencia de SHGetKnownFolderPath
está ahí:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb762188(v=vs.85).aspx
de referencia de todos los valores disponibles de enumeración KNOWNFOLDERID
está ahí:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx
Información, ese proceso de llamada es responsable de liberar recursos, se puede encontrar en la documentación de SHGetKnownFolderPath
en la parte que documenta el parámetro ppszPath
.
Tenga en cuenta que cuando se ejecuta desde el servicio, algunos valores no están disponibles (por ejemplo, relacionados con los datos del usuario, por ejemplo, FOLDERID_Documents
). Además, si algunos valores no están disponibles si está utilizando una arquitectura diferente (el valor de f.ex. relacionado con FOLDERID_ProgramFilesX64
no está disponible en el sistema operativo de 32 bits).
Si alguien está dispuesto a saber dónde anima Microsoft a usar SHGetKnownFolderPath
en lugar de otras funciones disponibles, lea la parte superior de la documentación de SHGetFolderPath
en desuso.
El crédito va para Brian R. Bondy; él respondió la pregunta como lo formulé. Terminé creando una carpeta llamada "Inicio" en "Menú de programas del usuario" (Ver> Sistema de archivos). Y confié en que el usuario instaló el programa con "Instalar ... para usted o para cualquier persona que use esta computadora" en "Todos". Si el usuario seleccionó "Solo yo", solo se habría colocado en el menú Inicio de ese usuario. Y supongo que estoy de acuerdo con eso. Supongo que * podría * haber copiado un atajo en una acción personalizada usando el método de Brian ... – fre0n