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);
}
}
}