Aqui está uma solução para ler - não escrever - as propriedades estendidas com base no que encontrei nesta página e na ajuda com objetos shell32 .
Para ficar claro, isso é um hack. Parece que esse código ainda será executado no Windows 10, mas chegará a algumas propriedades vazias. A versão anterior do Windows deve usar:
var i = 0;
while (true)
{
...
if (String.IsNullOrEmpty(header)) break;
...
i++;
No Windows 10, presumimos que haja cerca de 320 propriedades para ler e simplesmente ignoramos as entradas vazias:
private Dictionary<string, string> GetExtendedProperties(string filePath)
{
var directory = Path.GetDirectoryName(filePath);
var shell = new Shell32.Shell();
var shellFolder = shell.NameSpace(directory);
var fileName = Path.GetFileName(filePath);
var folderitem = shellFolder.ParseName(fileName);
var dictionary = new Dictionary<string, string>();
var i = -1;
while (++i < 320)
{
var header = shellFolder.GetDetailsOf(null, i);
if (String.IsNullOrEmpty(header)) continue;
var value = shellFolder.GetDetailsOf(folderitem, i);
if (!dictionary.ContainsKey(header)) dictionary.Add(header, value);
Console.WriteLine(header +": " + value);
}
Marshal.ReleaseComObject(shell);
Marshal.ReleaseComObject(shellFolder);
return dictionary;
}
Conforme mencionado, você precisa fazer referência ao assembly Com Interop.Shell32.
Se você obtiver uma exceção relacionada ao STA, encontrará a solução aqui:
Exceção ao usar Shell32 para obter propriedades estendidas de arquivo
Não tenho ideia de como seriam esses nomes de propriedades em um sistema estrangeiro e não consegui encontrar informações sobre quais constantes localizáveis usar para acessar o dicionário. Também descobri que nem todas as propriedades da caixa de diálogo Propriedades estavam presentes no dicionário retornado.
Aliás, isso é terrivelmente lento e - pelo menos no Windows 10 - analisar datas na string recuperada seria um desafio, portanto, usar isso parece uma má ideia para começar.
No Windows 10, você definitivamente deve usar a biblioteca Windows.Storage que contém SystemPhotoProperties, SystemMusicProperties etc.
https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
E, finalmente, postei uma solução muito melhor que usa WindowsAPICodePack lá