Conectando meu programa ao evento de renomeação do Windows Explorer
Pergunta
Existe alguma maneira, em qualquer idioma, de conectar meu programa quando um usuário renomeia um arquivo?
Por exemplo:Um usuário renomeia um arquivo e pressiona Enter (ou clica fora) para confirmar a ação de renomeação.ANTES de o arquivo ser renomeado, meu programa "escuta" esse evento e exibe uma mensagem dizendo "Tem certeza de que deseja renomear C: est\file.txt para C: est est.txt?".
Estou pensando/espero que isso seja possível com C++, C# ou .NET.Mas não tenho ideia de onde procurar.
Solução
Você provavelmente pode resolver isso usando o Classe FileSystemWatcher na estrutura .NET.
Das observações da aula:
Você pode observar a renomeação, exclusão ou criação de arquivos ou diretórios.Por exemplo, para observar a renomeação de arquivos de texto, defina a propriedade Filter como "*.txt" e ligue para o método WaitForChanged com um renomeado especificado para seu parâmetro.
Outras dicas
Meu palpite é que isso é não possível, eu encontrei esse que serve para monitorar operações (incluindo renomear) em uma pasta, mas não parece haver um método semelhante para arquivos.
@Richard, FileSystemWatcher é bom se você só precisa monitorar as alterações, mas ele precisa interrompê-las, o que não pode ser feito.
IFileOperationProgressSink.PreRenameItem
é a coisa mais próxima com suporte que conheço.Infelizmente, não é um gancho para o Explorer - então você só pode usá-lo para seu próprio uso IFileOperation
ações.Dependendo de suas necessidades, você pode escrever uma extensão de shell para fazer o seu próprio ConfirmRename
(ou algo assim) e ramificar a partir daí.
Caso contrário, você está pensando em fisgar SHFileOperation
, Eu penso.Isso teria que ser feito em código não gerenciado, pois você será carregado no Explorer.exe.Para o Vista, isso foi alterado para IFileOperation
- o que provavelmente significa que você terá que criar isso e distribuir sua simulação.
Pessoalmente, acho que já que você está falando de renomeação, ideia de Wilhelmtell de confirmar depois a alteração e desfazê-la se necessário é a melhor ideia.