Monitorar a seleção de arquivos no explorer (como o monitoramento da área de transferência) em C #

Estou tentando criar um pequeno aplicativo auxiliar, um cenário é "localizador de duplicação de arquivos". O que eu quero fazer é o seguinte:

Eu inicio meu aplicativo C # .NET, ele me dá uma lista vazia.Inicie o Windows Explorer normal, selecione um arquivo em alguma pastaO aplicativo C # me informa sobre esse arquivo (por exemplo, duplicatas)

Como posso monitorar o arquivo atualmente selecionado na instância "normal" do Windows Explorer. Preciso iniciar a instância usando o .NET para ter uma alça do processo. Preciso de uma alça, ou existe algum "gancho global" que eu possa monitorar dentro do C #. É um pouco como monitorar a área de transferência, mas não exatamente o mesmo ...

Qualquer ajuda é apreciada (se você não tiver código, aponte-me para as interoperações, dlls ou páginas de ajuda corretas :-) Obrigado, Chris

EDIT 1 (fonte atual, graças a Mattias)

using SHDocVw;
using Shell32;

public static void ListExplorerWindows()
{
    foreach (InternetExplorer ie in new ShellWindowsClass())
        DebugExplorerInstance(ie);
}

public static void DebugExplorerInstance(InternetExplorer instance)
{
    Debug.WriteLine("DebugExplorerInstance ".PadRight(30, '='));
    Debug.WriteLine("FullName " + instance.FullName);
    Debug.WriteLine("AdressBar " + instance.AddressBar);
    var doc = instance.Document as IShellFolderViewDual ;
    if (doc != null)
    {
        Debug.WriteLine(doc.Folder.Title);
        foreach (FolderItem item in doc.SelectedItems())
        {
            Debug.WriteLine(item.Path);
        }
    }
}

questionAnswers(1)

yourAnswerToTheQuestion