Conectando mi programa con el evento de cambio de nombre del Explorador de Windows

StackOverflow https://stackoverflow.com/questions/24644

  •  09-06-2019
  •  | 
  •  

Pregunta

¿Hay alguna forma, en algún idioma, de conectar mi programa cuando un usuario cambia el nombre de un archivo?

Por ejemplo:Un usuario cambia el nombre de un archivo y presiona Intro (o hace clic) para confirmar la acción de cambio de nombre.ANTES de que se cambie el nombre del archivo, mi programa "escucha" este evento y aparece un mensaje que dice "¿Está seguro de que desea cambiar el nombre de C: est\file.txt a C: est est.txt?".

Estoy pensando/espero que esto sea posible con C++, C# o .NET.Pero no tengo idea de dónde buscar.

¿Fue útil?

Solución

Probablemente puedas resolver esto usando el Clase FileSystemWatcher en el marco .NET.

De los comentarios de clase:

Puede observar el cambio de nombre, la eliminación o la creación de archivos o directorios.Por ejemplo, para observar el cambio de nombre de los archivos de texto, configure la propiedad del filtro en "*.txt" y llame al método WaitForChanged con un renombrado especificado para su parámetro.

Otros consejos

Supongo que esto es no posible, encontré este que es para monitorear operaciones (incluido el cambio de nombre) en una carpeta, pero no parece haber un método similar para archivos.

@Richard, FileSystemWatcher es bueno si solo necesitas monitorear los cambios, pero necesita interrumpirlos, lo cual no puede hacer.

IFileOperationProgressSink.PreRenameItem es lo más compatible que conozco.Desafortunadamente, no es un enlace al Explorer, por lo que sólo puedes usarlo para ti. IFileOperation comportamiento.Dependiendo de sus necesidades, puede escribir una extensión de shell para hacer las suyas propias. ConfirmRename (o algo así), y ramificar desde allí.

De lo contrario, estás buscando engancharte. SHFileOperation, Creo.Esto tendría que hacerse en código no administrado, ya que se cargará en Explorer.exe.Para Vista, esto se ha cambiado a IFileOperation - lo que probablemente significa que tendrás que enganchar su creación y distribuir tu simulacro.

Personalmente, creo que ya que estás hablando de un cambio de nombre, la idea de wilhelmtell de confirmar después el cambio, y deshacerlo si es necesario es la mejor idea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top