Pergunta

Precisamos obter de forma confiável a pasta Quick Launch para todos os usuários e usuários atuais no Vista e no XP.Estou desenvolvendo em C++, mas esta é provavelmente mais uma questão geral da API do Windows.

Para referência, aqui está o código para obter a pasta Application Data em ambos os sistemas:

    HRESULT hres; 
    CString basePath;
    hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
    basePath.ReleaseBuffer();

Suspeito que seja apenas uma questão de saber qual subpasta a Microsoft usa.

No Windows XP, a subpasta de dados do aplicativo é:

Microsoft\Internet Explorer\Início rápido

No Vista, parece que a subpasta foi alterada para:

Roaming\Microsoft\Internet Explorer\Início Rápido

mas gostaria de ter certeza de que esta é a maneira correta de determinar o local correto.

Encontrando o correto A maneira de determinar esse local é muito importante, pois confiar em nomes de pastas codificados quase sempre é interrompido à medida que você passa para instalações internacionais, etc.O fato de a pasta ser chamada de 'Roaming' no Vista me faz pensar se existe algum tratamento especial relacionado a essa pasta (semelhante à pasta Configurações locais no XP).

EDITAR:O seguinte artigo do MSDN: http://msdn.microsoft.com/en-us/library/bb762494.aspx indica que CSIDL_APPDATA tem um ID equivalente de FOLDERID_RoamingAppData, o que parece apoiar a afirmação de StocksR de que CSIDL_APPDATA retorna C:\Users\xxxx\AppData oaming, portanto, deve ser possível usar o mesmo caminho relativo para CSIDL_APPDATA para iniciar rapidamente (\Microsoft\Internet Explorer\Início Rápido).

Portanto, o seguinte algoritmo está correto por MS:

HRESULT hres; 
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
CString qlPath = basePath + "\\Microsoft\\Internet Explorer\\Quick Launch";

também seria uma boa ideia verificar hres para garantir que a chamada para SHGetSpecialFolderPath foi bem-sucedida.

Foi útil?

Solução

AppData no Vista refere-se a C:\Users\xxxx\AppData oaming e não à pasta C:\Users\xxxx\AppData em si.

Também este artigo http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspx em um site da Microsoft implica que você simplesmente precisa usar o caminho relativo à pasta appdata

Outras dicas

Ótima pergunta!

O que quer que você faça, não ceda à tentação de cavar no registro para encontrar essas informações!

Além disso, devemos resistir à tentação de codificar algum caminho, mesmo que parcialmente.Se obtivermos o caminho AppData especial e simplesmente anexar uma string no final, isso pode falhar em instalações do software fora dos EUA, onde o nome da pasta está localizado nesse idioma.Por exemplo. GetSpecialFolderPath(APP_DATA) + "\\Fonts" não funcionará em versões do Windows que não sejam em inglês.

Esperamos que alguém tenha a resposta adequada para sua pergunta;Estou curioso para saber sozinho!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top