Estou me perguntando por que certos aplicativos têm um comportamento diferente ao exibir diretórios acessados recentemente nas caixas de diálogo 'Salvar como' do Windows. Por exemplo, quando uso o Adobe Photoshop CC, tenho a opção de selecionar a seta suspensa no lado direito da barra de endereço:
Uma lista de diretórios aparece, porém não é organizada pelo mais recente. Parece quase aleatório quais diretórios ele exibe. Na verdade, existem diretórios que nunca salvei do aplicativo, o que me leva a acreditar que não é o aplicativo que está fazendo a curadoria da lista, mas alguma função do Windows.
Em contraste com isso, outros aplicativos como o 3dsMax, por exemplo, preenchem a lista com base nos diretórios reais visitados e os listam na ordem de quando foram acessados pela última vez:
Sei que esses programas implementam 'Salvar como' de maneiras diferentes devido ao comportamento da janela 'Salvar como'. No Photoshop, os usuários podem selecionar o caminho do diretório na barra de endereço e colar um caminho da área de transferência (ou digitar manualmente).
Em contraste, o 3dsMax tem uma maneira um pouco diferente de permitir isso (a barra de endereço na parte superior é na verdade uma barra de histórico implementada pelo aplicativo, mas os usuários podem navegar pelos diretórios por meio de um menu suspenso ou colar um nome de diretório no nome do arquivo campo.
Estes são apenas exemplos (cada um com seus próprios pontos fortes e fracos), porém eles demonstram que não existe um comportamento universal que seja adaptado por todos os aplicativos quando se trata da janela 'Salvar como'.
Estou confuso com tudo isso porque parece que todos os aplicativos estão usando alguma forma de shell do Explorer quando a função 'Salvar como' é evocada. Acredito que eles estejam usando um shell do Explorer porque ainda podemos executar funções do Explorer, como copiar arquivos, criar novas pastas, excluir arquivos e desfazer ações enquanto estiver nessas janelas.
Isso me leva à minha pergunta:
Por que os aplicativos do Windows têm comportamentos variados ao salvar em diretórios acessados recentemente quando todos estão usando algum tipo de shell do Explorer?
Essas duas coisas não são mutuamente exclusivas - é possível incorporar apenas o controle "ShellFolderView" (a exibição de ícone/lista usada pelo Explorer) enquanto ainda cria uma caixa de diálogo totalmente personalizada em torno dele, que é o que o 3dsMax provavelmente fez. É bastante semelhante à incorporação de um controle padrão de "botão" ou "caixa de listagem suspensa".
Realmente, isso também é o que a caixa de diálogo padrão Abrir/Salvar também faz. A caixa de diálogo padrão também não é uma janela do Explorer – é apenas modelada para se parecer um pouco com uma, mas na verdade é apenas uma janela de diálogo que incorpora um ShellFolderView. (Originalmente, no Windows 95, ele nem sequer tinha os recursos usuais do "Explorer" disponíveis; a capacidade de gerenciar arquivos na caixa de diálogo Abrir/Salvar foi adicionada ao Windows 98.)
(Como um exemplo específico que este projeto me lembrou, o Office 2000 também trouxe seus próprios diálogos de abrir/salvar arquivos com uma aparência distinta (uma barra lateral e um painel de visualização, nenhum dos quais o diálogo padrão do Windows tinha na época); todo o a caixa de diálogo foi criada de forma personalizada, exceto por ter um layout semelhante e incorporar uma exibição de pasta padrão.)
Também é possível criar um controle de exibição de lista/ícone personalizado que forneça funções quase idênticas. Qualquer programa pode criar novas pastas, mas o próprio Explorer fornece acesso programático a muitas de suas funções - por exemplo, qualquer programa pode fazer com que um menu do botão direito do mouse no estilo do Explorer seja exibido (completo com as extensões) e qualquer programa pode solicitar a exclusão de um arquivo para ser feito através do Explorer.
(Gerenciadores de arquivos de terceiros, como o Total Commander, costumam fazer isso; a lista de arquivos é personalizada, mas as interações podem ser direcionadas por meio do shell, se necessário. O Total Commander lida com a movimentação/renomeação de arquivos sozinho, pois qualquer programa pode renomear um arquivo, mas permite que a exclusão ocorra via Explorer para que os arquivos vão para a Lixeira.)