Trabajar con las Shell Libraries en Windows 7

Una de las novedades que introduce Windows 7 a nivel de gestión de archivos, con respecto a sistemas operativos anteriores, es la organización de los mismos en bibliotecas temáticas. Con ello se pretende separar los distintos tipos de contenidos de manera que sea más fácil localizarlos y trabajar con ellos.

En la siguiente imagen se puede ver cual es la distribución establecida por defecto:

 

Esta distribución se puede personalizar, es decir, es posible crear nuevas bibliotecas con los contenidos específicos que nosotros deseemos. A nivel de usuario, esto se puede hacer de manera sencilla mediante la opción Nueva Biblioteca que nos aparece en la parte superior del explorador cuando hacemos clic sobre Bibliotecas.

Pero en nuestro caso nos interesa ir un poco más allá y ver como se puede explotar la funcionalidad de las bibliotecas desde el punto de vista del desarrollador. Para ello vamos a ver cómo podemos programar una aplicación para Windows 7 de manera que se automatice este proceso. Esto puede ser útil cuando nos interese, por ejemplo, redirigir un tipo de contenido específico de nuestra organización (compras) a una ubicación concreta y predefinida.

Pero ¿que es lo primero que tenemos que hacer?Al igual que para trabajar con la TaskBar, se necesita agregar a nuestro proyecto las referencias especificas que nos permitan trabajar con las características de Windows 7 ( Microsoft.WindowsAPICodePack y Microsoft.WindowsAPICodePack.Shell, que forman parte del WindowsAPICodePack. En mi caso no las he utilizado, ya que he reutilizado una aplicación iniciada hace unos meses y en la que utilizaba la VistaBridgeLibrary. Decir que, entre ambas, existen diferencias en cuanto a los nombres de los métodos que se utilizan, pero que el “fundamento” es el mismo. 

A continuación lo que vamos a ver es una aplicación básica que nos permite crear nuevas bibliotecas e ir añadiendo contenido a ellas (en forma de carpetas).

 

Como se puede ver dicha aplicación es un Windows Form que consta de una serie de botones, cuadros de texto, labels…que nos permiten crear un sistema sencillo de gestión de bibliotecas.

1º Damos nombre a nuestra biblioteca, y la añadimos > Añadir Biblioteca

2º Indicamos si queremos añadir una carpeta a la biblioteca creada o a otra ( nombre) > Añadir Carpeta. Y seleccionamos la carpeta deseada mediante el explorador que se no despliega.

 

3º Indicamos si queremos eliminar una carpeta de la biblioteca creada o de otra(nombre) > Eliminar Carpeta. Y seleccionamos la carpeta deseada mediante el explorador que se no despliega.

Y el código utilizado para implementar esta aplicación es el siguiente:

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using Microsoft.SDK.Samples.VistaBridge.ShellLibrary;
  10. //nos permite trabajar con las ShellLibraries
  11.  
  12. namespace Libraries
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         public Form1()
  17.         {
  18.             InitializeComponent();
  19.             //Personalizamos la ventana de nuestra apliación
  20.             this.Text = "Shell Libraries";
  21.             this.Icon = new Icon(Properties.Resources.windows7, new Size(100, 100));
  22.  
  23.         }
  24.  
  25.         private void AñadirBiblio_Click(object sender, EventArgs e)
  26.         {
  27.  
  28.             if (LibraryName.Text == "")//comprueba que se introduce un nombre para la biblioteca
  29.             {
  30.                 Creado.Text = "Debe introducir un nombre";
  31.  
  32.             }
  33.             else
  34.             {
  35.                 CreateLibrary(LibraryName.Text);//se crear la biblioteca con el nombre indicado
  36.                 Creado.Text = "* Biblioteca" + " " + LibraryName.Text + " " + "creada";//indicamos que biblioteca se crea
  37.  
  38.             }
  39.         }
  40.         public static void CreateLibrary(string name)
  41.         {
  42.             //se crea la biblioteca
  43.             using (ShellLibrary library = ShellLibrary.Create(name, true))
  44.             {
  45.  
  46.             }
  47.         }
  48.  
  49.         private void AñadirCarpeta_Click(object sender, EventArgs e)
  50.         {
  51.             FolderBrowserDialog folderAdd = new FolderBrowserDialog();//
  52.  
  53.             if (folderAdd.ShowDialog() == DialogResult.OK)
  54.             {
  55.                 if (radioButton1.Checked == true)//si
  56.                 {
  57.                     AddFolder(LibraryName.Text, folderAdd.SelectedPath);//añadimos la carpeta seleccionada a la biblioteca creada
  58.                     Añadida.Text = "*Se ha añadido la carpeta: " + "\n" + folderAdd.SelectedPath.ToString() + " a la biblioteca" + " " + LibraryName.Text;//indicamos que carpeta se añade a la biblioteca creada
  59.                 }
  60.                 else if (radioButton2.Checked == true)
  61.                 {
  62.                     AddFolder(OtherLibraries.Text, folderAdd.SelectedPath);//añadimos la carpeta seleccionada a cualquier biblioteca
  63.                     Añadida.Text = "* Se ha añadido la carpeta: " + "\n" + folderAdd.SelectedPath.ToString() + " a la biblioteca" + " " + OtherLibraries.Text;//indicamos que carpeta se añade a que biblioteca
  64.                 }
  65.  
  66.             }
  67.  
  68.         }
  69.         public static void AddFolder(string name, string folderPath)
  70.         {
  71.             //se añade una carpeta de una ShellLibrary
  72.             using (ShellLibrary library = ShellLibrary.Load(
  73.                          ShellLibrary.CreateLibraryFullName(name), true))
  74.             {
  75.                 library.AddFolder(folderPath);
  76.             }
  77.         }
  78.         public static void RemoveFolder(string name, string folderPath)
  79.         {
  80.             //se elimina una carpeta de una ShellLibrary
  81.             using (ShellLibrary library = ShellLibrary.Load(
  82.                     ShellLibrary.CreateLibraryFullName(name), true))
  83.             {
  84.                 library.RemoveFolder(folderPath);
  85.             }
  86.         }
  87.  
  88.         private void EliminarCarpeta_Click(object sender, EventArgs e)
  89.         {
  90.             FolderBrowserDialog folderRemove = new FolderBrowserDialog();
  91.             if (folderRemove.ShowDialog() == DialogResult.OK)
  92.             {
  93.                 if (radioButton4.Checked == true)
  94.                 {
  95.                     RemoveFolder(LibraryName.Text, folderRemove.SelectedPath);//eliminamos la carpeta seleccionada de la biblioteca creada
  96.                     Eliminada.Text = "* Se ha eliminado la carpeta: " + "\n" + folderRemove.SelectedPath.ToString() + " de la biblioteca" + " " + LibraryName.Text;
  97.                 }
  98.                 else if (radioButton3.Checked == true)
  99.                 {
  100.                     RemoveFolder(RemoveLibraries.Text, folderRemove.SelectedPath);//eliminamos la carpeta seleccionada de cualquie biblioteca
  101.                     Eliminada.Text = "* Se ha eliminado la carpeta: " + "\n" + folderRemove.SelectedPath.ToString() + " de la biblioteca " + "" + RemoveLibraries.Text;
  102.                 }
  103.  
  104.             }
  105.  
  106.         }
  107.  
  108.  
  109.  
  110.     }
  111. }

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *