Existe uma função no ADVPL que permite você gravar na pasta temporária do usuário (windows) logado. A função é a GetTempPath Descrição: Retorna o caminho da pasta temporária do sistema atual. Sintaxe: GetTempPath() Resultado: "C:\Users\usuario\AppData\Local\Temp\" Agora, pegar a pasta Desktop, não achei função mas utilizo uma bem simples, sabendo que a pasta desktop do usuário está na mesma raiz da pasta AppData, subtituo tudo que vier a partir da pasta AppData por Desktop, por exemplo. Exemplo: cTemp := GetTempPath() Retorno = C:\Users\usuario\AppData\Local\Temp\ Removo AppData\Local\Temp\ e troco por Desktop\ Na verdade posso colocar qualquer outra pasta que esteja na mesma raiz. A função abaixo foi testada nas versões Windows XP,Windows 7 e 8.
#Include "Protheus.ch" User function fdesktop() Local cTemp := GetTempPath() //capturo a pasta temporária do usuario //Utilizarei a função AT para pegar a posição onde começa o texto \AppData //irei usar a função substring para pegar da 1ª posição até a posição do texto //informado na função AT Local cRaiz := substr(cTemp,1,AT("\AppData",cTemp)) //Agora incluo a pasta desktop ou qualquer outra que esteja na mesma raiz Local cDesktop := cRaiz + "desktop\" Local cDocument:= cRaiz + "Documents\" //Irei gravar um arquivo chamado teste.txt com o conteudo teste dentro dele memowrite(cDesktop+"meudesktop.txt","teste desktop") //ou memowrite(cDocument+"meusdocumentos.txt","teste meus documentos") Return