Mostrar encabezado o columna personalizados en el Explorador de Windows
Frecuentes
Visto 6,439 veces
2 Respuestas
13
Hay dos enfoques para crear columnas personalizadas en el Administrador de archivos de Windows: usar el sistema de propiedades de Windows y las definiciones de propiedades para el proveedor de almacenamiento en la nube. Por lo general, utilizará el primer enfoque para crear propiedades personalizadas para los tipos de archivos que posee. Utilizará el segundo enfoque cuando muestre datos personalizados de su sistema de gestión de documentos o cualquier otro almacenamiento.
Uso de un sistema de propiedades de Windows.
solicite crear propiedades personalizadas para tipos de archivos específicos en Windows Vista y versiones posteriores. Estas propiedades pueden ser de solo lectura o de lectura y escritura. Así como también pueden ser indexados por el indexador de Window Search y participar en la búsqueda. Hay algunas limitaciones:
- Microsoft dice claramente que los controladores de propiedades deben estar en C++, no puede estar en .NET:
...los controladores de propiedades no se pueden implementar en código administrado y se deben implementar en C++.
- La propiedad está vinculada al tipo de archivo específico, que normalmente pertenece a su aplicación. No puede crear una propiedad para todos los tipos de archivos.
Uso de definiciones de propiedades del proveedor de almacenamiento en la nube
En Windows 10 Creators Update y versiones posteriores, puede agregar columnas personalizadas para los sistemas de archivos creados con API de Cloud Sync Engine (Proveedor de almacenamiento, API de Cloud Filter). Esta API se usa en herramientas como OneDrive. Deberá registrar una raíz de sincronización del proveedor de almacenamiento en la nube con definiciones de propiedades personalizadas, proporcionar datos para sus columnas personalizadas y, finalmente, implementar un proveedor de almacenamiento en la nube mediante la API de Cloud File/Cloud Filter.
Las definiciones de propiedades no están vinculadas a un tipo de archivo y se pueden agregar para todos los archivos. Además, aunque solo algunas API están disponibles en .NET, aún puede llamar a las funciones de Win32 y crear un proveedor de nube usando solo código administrado.
Registro del proveedor de almacenamiento en la nube. Este es un ejemplo del registro del proveedor de almacenamiento con columnas personalizadas en C#:
StorageProviderSyncRootInfo storageInfo = new StorageProviderSyncRootInfo();
storageInfo.Path = await StorageFolder.GetFolderFromPathAsync("C:\\Users\\User1\\VFS\\");
...
// Adds columns to Windows File Manager.
// Show/hide columns in the "More..." context menu on the columns header.
var proDefinitions = storageInfo.StorageProviderItemPropertyDefinitions;
proDefinitions.Add(new StorageProviderItemPropertyDefinition { DisplayNameResource = "Lock Expires", Id = 2, });
proDefinitions.Add(new StorageProviderItemPropertyDefinition { DisplayNameResource = "Lock Scope", Id = 3, });
StorageProviderSyncRootManager.Register(storageInfo);
Se puede encontrar un ejemplo de registro completo aquí.
Proporcionar datos para las definiciones de propiedades. Para proporcionar los datos de las columnas, utilizará la llamada StorageProviderItemProperties.SetAsync():
IStorageItem storageItem = await Windows.Storage.StorageFile.GetFileFromPathAsync(path);
StorageProviderItemProperty propState = new StorageProviderItemProperty()
{
Id = 3,
Value = "Exclusive",
IconResource = "C:\\path\\icon.ico" // The optional icon to be displayed in the Status column.
};
await StorageProviderItemProperties.SetAsync(storageItem, new StorageProviderItemProperty[] { propState });
Otro enfoque sería implementar IStorageProviderItemPropertySource interfaz. Devuelve propiedades basadas en la ruta de su archivo.
Implementación del proveedor de almacenamiento en la nube. Finalmente, necesitará una implementación completa del sistema de archivos, proporcionando datos para los marcadores de posición de sus archivos/carpetas. Puede encontrar ejemplos completos en .NET/C# aquí:
contestado el 28 de mayo de 21 a las 10:05
Cuando dice "tipos de archivo que posee", ¿equivale a decir el siguiente campo en este flujo de trabajo: haga clic con el botón derecho en archivo > Propiedades > pestaña General > campo de valor con el texto previo de "abrir con" y un botón "Cambiar" al lado ? - MacGyver
@MacGyver. No, esto significa que no puede crear columnas personalizadas para archivos .exe o .docx. Pero puede crear columnas personalizadas para su propio tipo de archivo personalizado, que es administrado por su aplicación. - Golpeó WebDAV
Creo que lo encontré, haga clic derecho en el archivo> haga clic en "Propiedades" en el menú contextual> haga clic en la pestaña "Seguridad"> haga clic en el botón "Avanzado"> vea el campo "Propietario" - MacGyver
4
PRESTA ATENCIÓN: ESTA RESPUESTA ES SOLO PARA XP Y VISTA, ESTÁ DESACTUALIZADA
Se puede hacer en XP usando una extensión de shell Column Handler - vea aquí: http://www.codeproject.com/Articles/3747/Explorer-column-handler-shell-extension-in-C#
Sin embargo IColumnHandler
no es compatible con Vista y versiones posteriores. Aquí hay que implementar PropertyHandler
. Ver SDK de Windows \Samples\winui\Shell\AppShellIntegration\PropertyHandlers
.
Cada propiedad se describe mediante un archivo XML de esquema de propiedad. Este esquema de propiedad debe estar registrado con PSRegisterPropertySchema()
. Implementos del controlador de propiedades IInitializeWithXXX
, IPropertyStore
y opcionalmente IPropertyStoreCapabilities
. tienes que registrarte CLSID
de su implementación para cada extensión de archivo que desee manejar.
Desafortunadamente, no puedes usar AllFileSystemObject
or *
en registro.
Respondido el 09 de junio de 21 a las 18:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# .net windows shell-extensions or haz tu propia pregunta.
¿Puedo preguntar qué enfoque utilizó para agregar metadatos personalizados? ¿Utilizó un flujo de datos alternativo, o simplemente almacenó los datos en un archivo oculto, o algo más? ¡Gracias por cualquier información! - user9567282
@ amt528 No terminé persiguiendo el proyecto. Probé algunas cosas que podrían haber funcionado, pero después de 7 años realmente no recuerdo. - Elmo
Creo que tenía algo que ver con los metadatos del archivo NTFS. Copiar a un sistema de archivos diferente destruiría los metadatos. - Elmo
¿Sabes si se destruye si usas el sistema de propiedades de Windows? docs.microsoft.com/en-us/windows/desktop/properties/… - user9567282
@ amt528 Creo que no debería ser bombardeado, pero la mejor manera de saberlo es probarlo. Mueva el archivo con metadatos a una unidad flash formateada en FAT32 y luego vea si los metadatos están presentes. No sé dónde se almacenan exactamente los metadatos en este caso. Tal vez cuando inserte esa unidad flash en otra computadora, no tendrá los metadatos. - Elmo