2008-08-23 6 views
7

¿Hay alguna manera, en cualquier idioma, de enganchar mi programa cuando un usuario cambia el nombre de un archivo?Conectando mi programa con el evento de cambio de nombre de Windows Explorer

Por ejemplo: Un usuario cambia el nombre de un archivo y presiona enter (o clics de distancia) para confirmar la acción de cambio de nombre. ANTES de que se cambie el nombre del archivo, mi programa "escucha" este evento y muestra un mensaje que dice "¿Seguro que quieres cambiar el nombre de C: \ test \ file.txt a C: \ test \ test.txt?".

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

Respuesta

5

Probablemente pueda resolver esto usando FileSystemWatcher class en .NET framework.

De las observaciones de clase:

Usted puede ver por cambio de nombre, eliminación, o creación de archivos o directorios. Por ejemplo, para ver el cambio de nombre de los archivos de texto , establezca la propiedad Filter en "* .txt" y llame al método WaitForChanged con un nombre de Renacido especificado para .

0

Mi conjetura es que esto es no posible, me encontré this que es para el control de las operaciones de cambio de nombre (incluido) en una carpeta, pero no parece ser un método similar para los archivos.

@Richard, FileSystemWatcher es bueno si solo necesita supervisar los cambios, pero debe interrumpirlos, lo que no puede hacer.

0

IFileOperationProgressSink.PreRenameItem es la cosa más cercana compatible que conozco. Desafortunadamente, no es un gancho en Explorer, por lo que solo puede usarlo para sus propias acciones IFileOperation. Dependiendo de sus necesidades, puede escribir una extensión de shell para hacer su propio ConfirmRename (o algo así), y bifurcar desde allí.

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

personalmente, creo que ya está hablando un cambio de nombre, wilhelmtell's idea de confirmar después del cambio, y deshacer en caso de necesidad es la mejor idea.

Cuestiones relacionadas