| Actualización |
| 15-06-2010: Añadidas nuevas claves "especiales" en el punto 3, sección D |
Además cuando quieres crear una nueva carpeta o acceso directo, el menú "nuevo" demora varios segundos en aparecer y muestra muchos tipos de archivos cuando sólo utilizas unos pocos. Mi idea es mostrarte como solucionar estos problemas, la base de los mismos radica en un elemento llamado registro.
El registro de Windows es odiado y amado. He escuchado de que algunas distribuciones de Linux han pensado en la inclusión de una especie de base de datos de configuraciones, tal como lo hace el registro principalmente debido a la eficiencia que entrega y la facilidad que otorga a los programadores.
El mismo registro no es mágico, su contenido se encuentra en archivos protegidos del computador que pueden ser accesados por interfaces como el editor del registro o más conocido como Regedit.
Gracias al registro, Windows accede de manera relativamente eficiente a configuraciones y parámetros del sistema y de los programas, inclusive hay una rama del registro que es personal para cada usuario y se carga dependiendo del inicio de sesión que se utilice. Sin embargo, debido a multiples razones, el registro puede llegar a contener millones de datos inservibles y dado que las aplicaciones lo utilizan, pero no forman parte, muchos de estos datos son residuales. Entender el registro es una tarea casi imposible, en especial si tratamos de entender el funcionamiento de las clases de archivos, una de las ramas más importante que le dice al sistema como tratar cada archivo.
| Atención |
| Es importante advertir que cualquier modificación indebida al registro fácilmente deja el equipo inutilizable, por lo que debe ser editado bajo su propia responsabilidad |
1. Introducción al editor del registro (Arriba)
Como el registro no puede ser editado directamente con un editor básico como ocurre con otros archivos de configuración como los archivos ".ini", debemos conocer el editor de registro de Windows. Para llamarlo, simplemente ejecutamos Regedit.exe del directorio raíz del sistema o escribimos Regedit desde Inicio/Ejecutar.
En el panel de la izquierda del editor del registro vemos un arbol de las llamadas "Claves". Una clave es como una carpeta de opciones, y dentro de una pueden coexistir muchas otras aunque el nombre de ellas debe ser única.
Si seleccionamos una clave, en el panel de la derecha veremos los valores que contiene. Probablemente si elegimos una de las claves principales sólo veremos el valor predeterminado, valor siempre existente. En este artículo nos enfocaremos en la clave señalada como HKEY_CLASSES_ROOT en la lista.
2. Funcionamiento básico de las clases (Arriba)
El siguiente esquema que elaboré muestra de manera general el funcionamiento de las clases (las partes principales), el cual supone la relación de una extensión con un tipo de archivo el cual define propiedades generales de esa extensión.

Los controles dinámicos están definidos por un tipo de dato especial, el cual es un identificador único. Este identificador tiene una estructura basada en el siguiente patrón:
| Código: |
{00000000-0000-0000-0000-000000000000} |
En ciertas ocasiones deberemos saber identificar este tipo de relaciones por medio de identificadores, pues hay algunos archivos que relacionan funciones de esta forma. La explicación detrás de todo esto es que esta es la forma más simple de relacionar librerías con aplicaciones sin que las aplicaciones deban descubrir por sí mismos la ruta original del archivo que contiene la librería, así, solo hacen referencia a su identificador.
3. Quitando elementos del menú contextual (Arriba)
Hay varias opciones que tenemos para realizar esta tarea. A veces debemos utilizar varias de ellas para lograr lo que deseamos. Explicaré cada una de las maneras independientemente en los siguientes pasos:
A. Eliminación segura
Aunque es la menos efectiva, probablemente en la mayorías de las veces sea efectiva, y en ninguna instancia puede llegar a ser dañina.
Pensemos en que deseamos eliminar la opción "Imprimir" de nuestro tipo de archivo imaginario ".texto", vamos a "Opciones de carpeta" en el menú de herramientas de cualquier carpeta:

Dentro de "tipos de archivo", buscamos nuestro tipo de archivo buscado:

Seleccionamos el tipo de archivo, presionamos opciones avanzadas y quitamos los elementos que no deseamos del menú contextual:

Cabe resaltar que el editor proporcionado por Windows edita el tipo de archivo, sin embargo, muchas veces varios tipos de archivos hacen referencia a la misma extensión por lo que debemos guardar los cambios y volver a editar la misma extensión en donde probablemente aparecerán nuevamente los elementos que han sido eliminados.
Para comprobar la verdadera efectividad de esto que acabamos de hacer, iniciamos la aplicación que creo estos elementos del menú contextual y revisamos si estos elementos volvieron a aparecer.
B. Eliminación segura, alternativa
Como alternativa, se pueden utilizar aplicaciones para modificar el menú contextual. Hay una herramienta llamada Lopesoft FileMenuTools que permite modificar y añadir opciones, aunque no permite modificar independientemente elementos por tipo de archivo como ContextEdit, aplicación incluída en Avatar Utilities 2005.
C. Eliminación segura y masiva
Cada vez que instalamos una nueva aplicación, a veces sin querer instalarla (como por ejemplo cuando Microsoft Office detecta que necesita repararse por cualquier motivo, aunque, personalmente comprobé que en la versión de Office 2007 ya no sucede eso de las reparaciones "repentinas") muchas de nuestras configuraciones al menú contextual se pierden (por ejemplo yo borro siempre los elementos "Nuevo", "Abrir como sólo lectura", "Imprimir", "Modificar" de los archivos de la suite ofimática). Para evitar tener que realizar todo el trabajo nuevamente, lo más facil es crear un archivo ".cmd" con la lista de instrucciones que generalmente borramos e ir añadiendo cada vez más instrucciones no deseadas, lamentablemente hasta que los desarrolladores de aplicaciones entiendan que NO TODOS LOS USUARIOS DESEAMOS TENER TODO EN EL MENÚ CONTEXTUAL, un ejemplo de este archivo (para eliminar las opciones de "Nuevo" de la mayoría de archivos relacionados con Microsoft Word) puede ser:
| Código: |
@echo off |
D. Librerías contextuales
Algunas aplicaciones insertan librerías dinámicas que añaden el menú contextual. Aplicaciones como por ejemplo Windows Media Player mantienen cargado un dll que se encarga de añadir los elementos de "Añadir a la lista de reproducción" y otras opciones, la librería está en "Windows/System32" con el nombre de "wmpshell.dll" la cual debe ser borrada descargando explorer.exe y eliminada cualquier referencia con las instrucciones descritas en este documento.
Para aislar estos elementos debemos tener un control avanzado del registro. Para ejemplificar el proceso, les mostraré como eliminar un control que añade un editor Hexagesimal llamado Hex Workshop.
Lo primero es identificar que extensión es afectada. Hay archivos que probablemente no tengan extensión, como las carpetas, directorios de archivos, accesos directos, sin embargo son tratados como tipos de archivos en el registro con los nombres de Folder, Directory y lnkfile asociado a la extensión .lnk respectivamente.
El menú contextual objetivo es el siguiente:

Aparece cuando seleccionamos cualquier archivo, exceptuando las carpetas, es decir los archivos con extensión "*". Vamos al registro a revisar esto:
Hay diversas "extensiones" que tienen tipos de archivos especiales. En realidad no son extensiones (hay casos en que son extensiones pero con un parámetro llamado "NeverShowExt", para nunca mostrar la extensión aún cuando el sistema está configurado a mostrarlas), pero el sistema los maneja de forma especial, algunas de sus claves son:
| Código: |
HKEY_CLASSES_ROOT\* (Todos los archivos, no directorios) |
Existen también, algunas claves "especiales" que hacen las veces de contenedores (principalmente de identificadores de librerías, aplicaciones, componentes, etc):
| Código: |
HKEY_CLASSES_ROOT\AppID |
Es importante considerar que las mismas claves "especiales" pueden estar en HKEY_CURRENT_USER\Software\Classes, por ejemplo HKEY_CURRENT_USER\Software\Classes\Applications y también HKEY_LOCAL_MACHINE\SOFTWARE\Classes
Si indagamos dentro de la clave ShellEx encontramos controladores de panel de propiedades (esos que añaden pestañas a las propiedades de archivos como el de compresión de Winrar y el de propiedades del pdf de Adobe Acrobat) y controladores de menú contextual. Dentro está nuestro objetivo:

Sin embargo, cuando lo seleccionamos descubrimos que sólo contiene la siguiente información dentro:

Bueno, esto es lo que les explicaba al comienzo. Esto es un identificador único de la librería. Para descubrir a la verdadera librería tras esta máscara, buscamos la secuencia en el editor del registro:

Fíjense en las opciones utilizadas, sólo buscar claves con valores completos. Así optimizamos la búsqueda que en ocasiones puede tardar un par de minutos.
El resultado de la búsqueda se ve claro a continuación:

Dentro de esta clase con valor predeterminado "Hex Workshop Shell Extension" (lo que nos asegura aún mas que hemos encontrado la clave), encontramos la referencia de la clave "InProcServer32" al archivo buscado:

Simplemente debemos eliminar esta librería y nos libraremos del menú contextual. Para eliminarla (o simplemente renombrarla) hay que cerrar explorer.exe (y trabajar sólo con la consola de Windows) desde el Administrador de tareas, en procesos y utilizar la consola de comandos. Puede que podamos deshabilitar la extensión simplemente invocando el comando "regsvr32 /u <ruta y nombre>" con la información de la librería.

E. De extensión a tipo maestro
Algunas veces un tipo de archivo tiene varias extensiones. Por ejemplo una imagen puede tener extensión ".jpg" y ".jpeg", pero compartir todas las demás propiedades, como el nombre del tipo de archivo que se muestra en el explorador de Windows, los comandos "Abrir", "Editar", entre otros.
En estas situaciones lo mejor no es colocar todos estos parámetros directamente en la clave de la extensión, sino asociar esta extensión con un tipo de archivo maestro. En este caso simplemente basta modificar esa clave de tipo archivo maestro:

Para dejar más claro este aspecto, en la siguiente imagen se puede apreciar el tipo de archivo maestro de las extensiones ".jpg" y ".jpeg" están relacionados con "jpegfile" el cual tiene todos los comandos y propiedades comunes de ambos:

| Nota |
| Las claves "Content Type" y "PerceivedType" funcionan de una forma similar a la mostrada en este punto, pero se relacionan con el tipo de contenido y la aplicación o aplicaciones que lo manejan como se ve en el siguiente punto |
Aunque el tipo de archivo maestro puede verse claramente dentro del editor del registro, también hay un comando en la consola de Windows para este propósito:
| Código: |
ASSOC <.extensión>=<"tipo de archivo maestro"> |
El comando llamado con los todos los parámetros modificará el tipo de archivo maestro para la .extension. Alternativamente, se puede ver la lista completa de extensiones vs. tipos de archivo escribiendo "ASSOC" sin parámetros, consultar el tipo de archivo de una extensión escribiendo "ASSOC .extensión" y finalmente eliminar la asociación con un tipo de archivo escribiendo "ASSOC .extensión=".
Por defecto, Windows crea tipos de archivos maestros para las asociaciones de archivo creadas por el usuario utilizando el siguiente formato:
| Código: |
ftN (filetypeN) |
Externamente esta peculiaridad pasa desapercibida por el usuario, pues al crear una nueva asociación con una extensión de archivo podemos elegir el tipo de archivo asociado usando el nombre para mostrar que escribimos en la descripción (que internamente tendrá el nombre de clave anterior) desde opciones avanzadas:

Relacionado con este aspecto también tenemos un tipo de archivo genérico el cual se crea cuando es el sistema el que crea la extensión (generalmente desde el dialogo "Abrir con...", cuando se define que siempre se debe usar ese programa para abrir el archivo):
| Código: |
EXT_auto_file |
F. Extensión a tipo, y de tipo hasta aplicación
En ciertas ocasiones, una extensión tiene asociado un tipo de archivo, pero este tipo no tiene el menú contextual, ni una librería dinámica que lo agregue. Entonces en este caso probablemente se trate de otro tipo de relación.
Esta relación es de extensiones por aplicación, es decir, el menú contextual se le referencia a la aplicación (archivo ejecutable) y no al tipo de archivo, como es el caso del visor de fotos de Windows, o el Bloc de notas. En estos últimos dos ejemplos, hay referencias directas a la aplicación shimgvw.dll y notepad.exe respectivamente.
Para borrar referencias de este tipo, vamos a la clave "Applications", que está en la clave de clases:

Ahí buscamos el archivo ejecutable con el que se asocia el tipo de archivo, esto está en relación con el tipo de archivo y con la extensión:

Como resumen al esquema, debemos editar las opciones contextuales de la clave "Applications", para editar el menú que aparece según el contenido.
Según el contenido, se relacionan las extensiones desde la clave de contenido que está en la rama indicada a continuación:

| Curiosidad |
Más de algún usuario habrá notado algunos elementos del menú Ver, Barra de explorador (de todas las carpetas en Windows XP/2003 o anterior) que son realmente antiguos, incluso con Windows XP SP2 (más aún con Internet Explorer 7 o superior) perdieron casi completamente funcionalidad:![]() Para quitarlos fácilmente, desde HKEY_CLASSES_ROOT/CLSID invalidan las siguientes claves (yo añadí un signo de pregunta al comienzo para anularlas): ![]() Luego se debe reiniciar el proceso "explorer.exe" para ver los cambios. Algunos elementos pueden no estar en tu equipo según las aplicaciones que tengas instaladas o utilices (como la opción "Discusión" que es activada al usar Outlook Express). El agradable resultado: ![]() |
G. La acción predeterminada
Al hacer doble clic sobre una carpeta lo lógico es que se abra en el explorador de Windows, ¿Qué cambia cuando no sucede esto?, ¿Dónde se almacenan las acciones predeterminadas que se gatillan haciendo doble clic?:

| Nota |
| Algunos elementos del menú contextual de la imagen (como copiar ruta al portapapeles) los añadí con el excelente "FileMenu Tools" de Lopesoft |
Primero, al nivel más de usuario, la acción predeterminada es la que aparece en opciones de carpeta (en la pestaña tipos de archivo) y es fácilmente modificable:

Claro que esta función es bien limitada por lo que algunas veces tendremos que modificar directamente el registro. Ahora, la acción predeterminada, vista desde el punto de las claves del registro es simplemente la que el elemento "(Predeterminado)" designa en el contenedor de las acciones, es decir viendo el caso de la extensión de la imagen anterior (.docm), vamos al registro y descubrimos que directamente no tiene ninguna clave "Shell", sin embargo está asociada a un tipo maestro:

Ahora si vemos el tipo de archivo maestro:

Vean que en "(Predeterminado)" tenemos designada la acción "open", está será la predeterminada al hacer doble clic sobre este tipo de archivo.
Todo esto está muy bien, pero a veces puede ser confuso, por ejemplo, ¿Qué sucede si alguna acción aparece como predeterminada, pero no está en la lista de acciones?:

Fíjense que "open" no está en la lista de acciones. Nunca debemos olvidar que Windows recopila gran cantidad de datos antes de mostrarnos el menú contextual, lo que sucede aquí es simplemente que la acción "open" es traspasada a un tipo heredado de "Directory", como lo es "Folder".
| Importante |
| Muchos problemas pueden suceder por esta situación, el ejemplo más común es cuando al hacer doble clic sobre una carpeta o unidad no obtenemos un comportamiento deseado. Para comprender la forma de funcionamiento del menú contextual especial de estos elementos debemos tener en cuenta lo especial que es este menú y sus orígenes representados en este esquema básico: ![]() Así si por ejemplo al hacer doble clic sobre una unidad se les abre el buscador de archivos pero cuando hacen clic sobre una carpeta normal no, sabrán que deben revisar HKCR\Shell\Drive y no HKCR\Shell\Folder que es contenedor de la primera. Lo más facil cuando se un programa corrompe las clases de archivos es rápidamente reiniciar y presionar F8 antes de que comience a cargar Windows, seleccionando "La última configuración buena conocidad". La otra posibilidad es comparar las clases ya conocidas con un computador en buenas condiciones. |
Un detalle final es que cuando aparece el diálogo de "abrir con..." al hacer doble clic sobre algún archivo, es simplemente debido a que la clave "shell" del tipo de archivo y tipo de archivo madre de ese mismo tipo está vacía.
4. La creación de un nuevo archivo (Arriba)
El menú secundario nos ofrece otras opciones además de las que acabamos de revisar anteriormente. Si hacemos clic secundario sobre un área sin iconos podemos acceder a un menú señalado como "Nuevo". Desde ese menú podemos crear archivos nuevos de la nada, sin una aplicación generadora. Para archivos de texto, carpetas y accesos directos, esto es casi impresindible:

Sin embargo, ¿Cuándo desearán crear un archivo de Adobe Photoshop, o un archivo de AtlTraceTool como se ve en la imagen?
Probablemente nunca. La solución para crear la mayoría de esos archivos es simplemente abrir la aplicación que los genera, aunque pueden existir ciertas excepciones como por ejemplo los archivos comprimidos que puede ser cómodo adjuntar archivos a un archivo en "blanco".
Entonces, ¿Para que tener millones de tipos de archivos en este menú cuando con los básicos tenemos suficiente y no tenemos que esperar varios segundos para visualizar el menú completo?. La idea es lograr un menú que contenga sólo los nuevos archivos que necesitamos, en mi caso es similar al siguiente:

O al menos, uno más completo con las opciones que gustes. A diferencia de Windows 98 o ME, en Windows 2000, XP o 2003 el control de este menú se realiza por medio del registro y no de una carpeta aunque aún se conserva este método.
Los pasos para eliminar estos elementos radica en la utilización de una utilidad de unas herramientas que Microsoft entregó a sus usuarios.
La herramienta propuesta se llama TweakUI, gratuita, la cual puede ser descargada desde el sitio de Microsoft. En la opción "Templates" se pueden agregar y eliminar los elementos del menú secundario:

Como referencia, lo único que hace TweakUI es invalidar la propiedad ShellNew en el registro. En la siguiente imagen se puede observar la propiedad citada:

Para invalidar la propiedad "ShellNew" simplemente el programa añade un símbolo adelante, es decir, "ShellNew" pasa a ser "-ShellNew".
| Nota |
| Las plantillas para los nuevos archivos que no pueden crearse como archivos sin estructura (la aplicación asociada mostraría un error al abrir un archivo de cero bytes) generalmente están en el directorio SHELLNEW, dentro de la carpeta WINDOWS |
5. Cuando las aplicaciones vuelven a la carga (Arriba)
Algunas aplicaciones tienden a generar nuevamente los elemento que hemos eliminado. Por ejemplo aunque borremos la opción de "Modificar" con Microsoft Word los documentos HTML, estos vuelven a generarse cada vez que abrimos Microsoft Word.
Otro ejemplo es cuando borramos del menú "Nuevo" el elemento de "Adobe Photoshop Image", si iniciamos Adobe Photoshop (por lo menos en la versión CS y CS2 de esta aplicación) estos elementos vuelven y se generan nuevamente, Macromedia Flash MX, MX 2004 y la versión 8 de estas aplicaciones también hacen lo mismo.
Para evitar esto, administraremos los permisos del registro. Como ejemplo, demostraré la forma de prohibirle a Photoshop que reactive "ShellNew". Primero, borramos el elemento "Adobe Photoshop Image" con TweakUI. Ahora abrimos Photoshop:

Nos cercioramos que el elemento vuelva a aparecer en el menú "Nuevo":

Ciertamente el elemento volvío. Es increíble que añadan sistemas de restauración automáticos a las aplicaciones, personalmente prefiero que estas opciones se incluyan como alternativa y no como imposición, probablemente podría consultar al usuario.
Vamos al editor del registro, buscamos la extensión del archivo que genera ese "Adobe Photoshop Image" el cual es ".psd":

¿Notan la existencia de "ShellNew" en conjunto con "-ShellNew"?, TweakUI había anulado el anterior "ShellNew", el cual fue recontruído por Photoshop. Ahora quitamos todos los elementos nombrados:

A continuación establecemos los permisos de ".psd":

Vamos a "Opciones avanzadas" y luego en la ficha de "Permisos" modificamos "Administradores (Dominio)":

Debemos denegar la creación de nuevas subclaves:

Ahora hemos protegido nuestro tipo de archivo de la recuperación automatizada de las aplicaciones lo que mantendrá intacta nuestra configuración.
| Nota |
| El denegación de permisos es generalmente invisible para el usuario y las aplicaciones, el registro genera la denegación internamente (puede apreciarse con herramientas especializadas como Regmon), pero las aplicaciones no mostrarán un error a menos que estén preparadas para hacerlo (como ciertos instaladores que van comprobando que los cambios en el registro se efectuen) |
El procedimiento mostrado en los pasos anteriores puede ser el único disponible cuando las aplicaciones están diseñadas para reparar "agresivamente" las modificaciones del registro de forma automática, impidiendo que el usuario configure su equipo como desee, sin embargo hay una manera menos invasiva (aunque a veces no es tan efectiva) que consisten en crear una clave "LegacyDisable" (sin ningún valor) en lugar de reasignar los permisos.
Esta propiedad que puede ser aplicada a infinidad de elementos "activos" del registro, por ejemplo en la imagen se muestra como impedir que no se muestre la opción para crear archivos ".mp7" en el menú de "Nuevo", aún cuando la aplicación que utiliza los archivos ".mp7" genere reiteradamente la clave "ShellNew" (si la borraramos):

| Nota |
| Alguna aplicaciones "insisten" en anular "LegacyDisable" de cualquier forma (borrando esta o creando otras claves que tienen preferencia para Windows), por lo que la opción final que queda es denegar el permiso a crear subclaves para esos registros |
6. El disco duro tozudo (Arriba)
En ciertas ocasiones, el disco duro parece no responder a nuestro doble clic o funcionar incorrectamente.

Luego de leer este documento podrás comprender como configurar el elemento predefinido, en especial cuando algún programa mal intencionado ha afectado nuestro equipo, el disco duro y otros elementos pueden depender de las siguientes claves:
| Código: |
HKEY_CLASSES_ROOT\* |
Sin embargo a veces lo que sucede es que existe un archivo "autorun.inf" que afecta el comportamiento de la unidad. Por ejemplo si tenemos un disco duro o unidad de disco extraíble en "X:" con los síntomas comentados, desde la consola escribimos:
| Código: |
X: |
Relacionado con este tema, es posible que la siguiente utilidad sirva para limpiar y corregir tu equipo:
files/articles/_public/fix_drive_brotok_1.rar
| Adicionalmente |
| Sin tener mucha relación con el menú contextual, es importante destacar algunas claves de registro populares que son atacadas por estos "virus". Según la sesión, pueden estar en "HKCU\Software\Microsoft\Windows\Currentversion\" o "HKLM\Software\Microsoft\Windows\Currentversion\", las siguientes alteraciones: Explorer\Advanced\ShowSuperHidden (Mostrar archivos de sistema) Policies\Explorer\NoFolderOptions (Sin opciones de carpeta) Policies\System\DisableRegistryTools (Deshabilitar el registro) En donde un "0" representa falso y "1" verdadero. Otra importante es "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell" en donde el valor debe ser únicamente "explorer.exe" |
7. Conclusiones (Arriba)
Windows nos da muchas facilidades, pero para realizar tareas poco convencionales siempre hay dificultades. Sin embargo con un poco de ingenio todo puede llevarse a cabo.
En la red no había encontrado muchas formas de modificar, limpiar y mantener la integridad del menú contextual, por ese motivo me tomé el tiempo de generar este, esperando que este documento sea de utilidad para todos los usuarios que quieran alcanzar un poco de perfección en los detalles, como yo.





