Modifica l'Explorador de fitxers de Windows usant Shell Extensions

  • Les extensions de Shell permeten personalitzar profundament lExplorador, més enllà del que ofereix el Registre.
  • Windows ofereix múltiples controladors (menú contextual, icones, miniatures, metadades i espai de noms) per adaptar el comportament per fitxer.
  • A Windows 11 es pot netejar i accelerar l'Explorador modificant claus del Registre per a menús, panell esquerre i plantilles de carpetes.
  • Les aplicacions modernes empaquetades amb MSIX integren menús contextuals i servidors COM mitjançant extensions declarades al manifest.

Personalitzar Explorador de fitxers de Windows

Si ets dels que es desesperen amb menús plens d'opcions que no uses, integracions mal fetes o lentitud en obrir carpetes, ets al lloc adequat.

Al Windows pots modificar el comportament de l'Explorador i del menú contextual de diverses maneres (incloent-hi trucs de l'Explorador de fitxers a Windows 11): mitjançant el Registre, amb extensions de Shell clàssiques en forma de DLL, amb paquets MSIX moderns i fins i tot creant les teves pròpies extensions a .NET o C++. Recorrerem totes aquestes possibilitats amb calma, però sense embuts.

Què són les extensions de Shell i per què el Registre es queda curt

El Shell de Windows es pot ampliar de forma bàsica mitjançant entrades del Registre i fitxers .ini. Aquest enfocament és senzill i n'hi ha prou per personalitzar icones per tipus de fitxer, afegir alguna ordre extra o associar extensions. No obstant això, té una limitació important: tot el que definiu s'aplica a nivell de tipus de fitxer, no de fitxer individual.

Un exemple típic és el de les icones personalitzades per extensió: si al Registre assignes una icona als .docx, totes les còpies d'aquest tipus de fitxer veuran la mateixa icona, encara que vulguis distingir els uns dels altres. I hi ha àrees del Shell, com el full de propietats que apareix en fer clic dret i triar Propietats, que simplement no es poden modificar només amb claus de Registre.

Per controlar de debò l'Explorador necessites fer un pas més i utilitzar controladors d'extensió de Shell (shell extensions handlers). Aquests són components COM (normalment DLL) que l'Shell invoca cada vegada que realitzarà una acció determinada: mostrar una icona, desplegar el menú contextual, renderitzar una miniatura, ensenyar un tooltip, etc. L'Explorador consulta el controlador just abans d'executar l'operació, donant-vos l'oportunitat de canviar el resultat.

Un cas molt comú és el controlador de menú contextual. Si en creeu un per a un tipus de fitxer, Windows l'invocarà cada vegada que feu clic dret sobre qualsevol fitxer d'aquest tipus. Aquest component pot afegir elements de menú diferents en funció del fitxer concret, del nombre d'elements seleccionats, de la ruta, etc., una cosa impossible d'aconseguir només amb una simple associació d'ordres al Registre.

En aquesta família de controladors hi ha dos grans grups: els que estan lligats a tipus de fitxer concrets (i actuen “per arxiu”) i els que s'executen en operacions generals de l'Shell (sense dependre d'una extensió en particular). Veure'ls amb cert detall t'ajuda a entendre fins on pots arribar.

Extensions de Shell al Windows

Principals controladors associats a tipus de fitxer

Els controladors lligats a tipus de fitxer us permeten personalitzar el comportament de l'Explorador per a extensions concretes. Funcionen a nivell de fitxer individual, així que podeu adaptar menús, icones o propietats depenent de cada element.

  • Controlador de menú contextual. S'executa just abans de mostrar el menú contextual d'un fitxer. Permet afegir ordres addicionals, reorganitzar elements i mostrar opcions només per a determinats fitxers o situacions (per exemple, si hi ha diversos fitxers seleccionats, si és una carpeta especial, etc.).
  • Controlador de dades (Data Handler). Entra en joc en operacions d'arrossegar i deixar anar sobre objectes del Shell. Podeu aportar formats addicionals del Portapapers perquè la destinació tingui més informació (per exemple, una representació alternativa en format XML o binari).
  • Controlador de col·locació (Drop Handler). S'invoca quan arrossegues o deixes anar dades sobre un fitxer concret. Serveix perquè un fitxer actuï com a destinació d'una operació de drag & drop, per exemple, deixant caure diversos fitxers sobre un fitxer .zip o sobre una base de dades.
  • Controlador d'icones (Icon Handler). S'anomena abans que l'Shell mostri la icona d'un fitxer. Permet substituir la icona genèrica d'un tipus per un generat “a mida” per a cada arxiu, molt útil en elements com imatges, documents de projectes, estats de sincronització, etc., i per això convé revisar-ne les millors extensions per a l'Explorador.
  • Controlador de full de propietats. S'activa quan mostrareu el quadre de diàleg Propietats un objecte. Podeu utilitzar-lo per afegir pestanyes addicionals o reemplaçar algunes de les existents, de manera que la vostra aplicació exposi la configuració directament a la fitxa de propietats del fitxer.
  • Controlador de miniatures (Thumbnail Handler). Genera la imatge que veus a la vista en miniatura de l'Explorador. Això permet que un fitxer de vídeo mostri un fotograma representatiu o que un format d'imatge poc comú tingui vista prèvia sense dependre d'aplicacions externes.
  • Controlador de requadre informatiu (InfoTip Handler). S'utilitza per generar el text emergent (tooltip) que apareix quan deixeu el ratolí sobre un fitxer. Aquí podeu mostrar metadades rellevants: durada d'un àudio, resolució d'una foto, estat d'un document, etc.
  • Controlador de metadades. Proporciona accés de lectura i escriptura a les propietats emmagatzemades dins un fitxer. Gràcies a ell pots ampliar la vista de Detalls, la informació de tooltips, les agrupacions i les columnes addicionals amb metadades personalitzades.

Altres controladors de Shell no lligats a un tipus de fitxer

A més dels controladors que depenen d'un tipus de fitxer, existeixen altres que el Shell invoca abans de certes operacions generals de l'Explorador. Són els que fan el salt a personalitzacions de més alt nivell.

  • Controlador de columnes. Es consulta abans de mostrar la vista Detalls una carpeta. Serveix per afegir columnes personalitzades (per exemple, “Rating”, “Autor intern”, “Estat de validació”) que s'omplen amb informació calculada per la teva extensió.
  • Controlador d'enllaç de còpia (Copy Hook Handler). S'invoca quan el sistema mou, copia, elimina o reanomena una carpeta o impressora. Permet aprovar o bloquejar aquesta operació, molt útil en solucions de seguretat, polítiques corporatives o carpetes supervisades.
  • Controlador d'arrossegar i col·locar (Drag & Drop Handler contextual). S'anomena quan arrossegues un fitxer amb el botó dret del ratolí. Podeu modificar el menú contextual que apareix en deixar anar, incorporant accions especials com “Convertir i moure”, “Pujar i esborrar original”, etc.
  • Controlador de superposició d'icones (Icon Overlay Handler). Afegeix una petita marca sobre la icona d'un fitxer o una carpeta (per exemple, el check verd de sincronitzat o un signe d'exclamació). El Shell ho invoca just abans de pintar la icona, i el teu codi decideix quina superposició aplicar.
  • Controlador de cerca. S'usa per llançar motors de cerca personalitzats integrats al propi Shell. Gràcies a ell pots exposar un motor de cerca propi accessible des del menú Inici o des de l'Explorador, que treballi sobre dades remotes o estructures no estàndard.

Menú contextual i extensions de l'Explorador

Extensions d'espai de noms: carpetes virtuals a l'Explorador

L'Explorador de Windows no només ensenya el sistema de fitxers tradicional; en realitat reflecteix un “espai de noms” complet que inclou carpetes virtuals com la Paperera de reciclatge, Biblioteques o impressores. Amb una extensió despai de noms pots enganxar qualsevol cos de dades i presentar-lo com si fos una carpeta normal.

Quan creeu una extensió d'espai de noms, l'Explorador mostra les vostres dades com una jerarquia de carpetes i fitxers, encara que realment estiguin en una base de dades, en un dispositiu remot o siguin simples enllaços lògics (com passa amb les impressores). Per a l'usuari, es comporta igual que qualsevol altra carpeta: podeu copiar, moure, esborrar, veure propietats i fins i tot llançar cerques.

Tècnicament, cada carpeta visible a l'Explorador està representada per un objecte COM anomenat “folder object”. Quan l'usuari interactua amb aquesta carpeta o amb el seu contingut, l'Shell parla amb aquest objecte mitjançant interfícies estàndard com IShellFolder. L'objecte respon a les peticions (llistar elements, tornar icones, noms, atributs…) i l'Shell actualitza la interfície gràfica.

Aquest model és especialment útil quan les vostres dades no encaixen bé en l'estructura de fitxers i carpetes estàndard. Pensa en una base de dades que vols navegar com si fossin carpetes, en el contingut d'una càmera digital sense sistema de fitxers Windows o en una col·lecció d'objectes purament lògics (per exemple, feines d'impressió a la cua).

Una extensió d'espai de noms es divideix, a grans trets, en dues parts: un gestor de dades (com i on guardes la informació, al teu gust) i una capa d'interfície amb l'Explorador que empaqueta aquestes dades com a carpetes i fitxers. Aquesta segona peça és la que implementa les interfícies COM perquè DefView (la vista de carpeta per defecte) i la resta del Shell sàpiguen com mostrar i manipular el contingut.

Com interactuen les vistes de l'Explorador amb una extensió

La finestra de l'Explorador es compon de diverses àrees: vista d'arbre, vista de carpeta, barres de menús i eines i barra d'estat. Quan entres en una carpeta gestionada per la teva extensió d'espai de noms, el codi pot influir en totes, encara que en graus diferents.

La vista d'arbre mostra una visió d'alt nivell de la jerarquia. Allotja un control TreeView que ensenya cada carpeta de l'espai de noms i la seva posició. Des d'aquí l'usuari pot desplegar nivells, arrossegar carpetes, fer servir el menú contextual o obrir subcarpetes. L'explorador es comunica sobretot mitjançant IShellFolder, demanant atributs, enumerant subcarpetes, sol·licitant noms a mostrar i icones.

La vista carpeta (el panell dret amb els fitxers) és encara més flexible. A diferència de la vista d'arbre, l'Explorador no en controla directament el contingut; simplement crea una finestra filla i se la cedeix al teu objecte folder. Aquesta finestra pot allotjar un ListView clàssic, un control de navegador web amb HTML dinàmic o qualsevol altra cosa que tingui sentit per a les vostres dades.

El més habitual és reutilitzar DefView mitjançant la funció SHCreateShellFolderView, que et dóna la vista estàndard amb icones, detalls, ordenació, grups, etc., i et centres en proporcionar les dades. Tot i això, si necessites una presentació molt particular, pots fer una vista completament personalitzada.

Les barres de menús i eines de l'Explorador es poden personalitzar des de la vostra extensió. L'intèrpret d'ordres exposa la interfície IShellBrowser, que et permet afegir o treure botons i elements de menú, o reaccionar a ordres concretes. Quan l'usuari fa clic a un botó personalitzat, l'Explorador reenvia el missatge WM_COMMAND a la finestra perquè processis l'acció.

La barra d'estat és un altre canal molt útil. Des del mateix IShellBrowser podeu actualitzar el text per mostrar informació contextual sobre l'objecte seleccionat, el nombre d'elements, errors de la vostra extensió, etc., millorant així la sensació d'integració amb el sistema.

Crear extensions per a l'Explorador amb una llibreria de classes .NET

Si desenvolupes a .NET, hi ha la possibilitat d'usar una llibreria amb classes base per simplificar la creació de moltes d'aquestes extensions. La idea és molt directa: crees un projecte de llibreria de classes, hi afegeixes una classe COM i la fas heretar de la classe base que correspongui al tipus d'extensió que vulguis implementar.

Per exemple, BrowserHelperObjectBase us facilita la creació de Browser Helper Objects per a Internet Explorer, mapejant mètodes, esdeveniments i propietats del navegador cap al teu codi. Exposes coses com la instància d'IE (propietat Internet Explorer), la finestra on corre l'objecte (Planta) i maneges esdeveniments com OnConnection u OnDisconnection.

ContextMenuHandlerBase simplifica la creació de menús contextuals per a l'Explorador. Només has d'emplenar la col·lecció MenuItems amb objectes MenuItem, com faries en un formulari Windows Forms, i enganxar-te a l'esdeveniment feu clic de cada opció. La propietat Arxius et dóna la llista de fitxers seleccionats, i el mètode OnMenuSelected serveix per actualitzar el text dajuda de la barra destat.

Amb DropHandlerBase implementes manejadors de drag & drop associats a un fitxer. Disposes de propietats com Nom de l'arxiu (el destí sobre el qual es deixen anar arxius) i Arxius (els arrossegats), i de mètodes com OnDragEnter, OnDragOver, OnDragLeave y OnDragDrop per reaccionar a cada fase de l'arrossegament.

IconHandlerBase us permet tornar la icona que mostrarà l'Explorador per a cada fitxer. Des de OnGetIconLocation decideixes on és la icona ia OnExtractIcon tornes els manejadors d'icona concrets, podent generar miniatures o representacions avançades.

El registre d'aquestes extensions .NET es fa via COM usant regasm.exe. Les classes base inclouen mètodes marcats amb ComRegisterFunction y ComUnregisterFunction que s'encarreguen de crear o eliminar les entrades adequades al Registre quan registres l'assemblat. A més a més, moltes d'aquestes classes admeten l'atribut ExtensionFileTypes per indicar quins tipus de fitxer afecten (pot ser una llista separada per comes o el comodí * per a tots).

Reemplaçar o modificar l'intèrpret d'ordres (explorer.exe) a nivell de sistema

Una altra manera de “tocar” l'entorn de Windows de forma radical és canviar l'intèrpret d'ordres per defecte, és a dir, el programa que s'inicia en fer login. En sistemes de propòsit únic (kiosks, dispositius industrials, terminals) de vegades no vols que Explorer s'executi, sinó una única aplicació a pantalla completa; si necessites altres opcions consulta alternatives a l'Explorador de Windows.

En entorns Windows Server i també en client, aquest comportament es controla a través del Registre, a la clau HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell. Substituint el valor per la ruta del teu executable aconsegueixes que en iniciar sessió es carregui el teu programa en lloc de l'Explorador clàssic.

La precaució aquí és clara: desactivar explorer.exe com a shell deixa sense escriptori, barra de tasques i finestres de carpeta a lusuari final, així que és una opció pensada per a sistemes tancats. A més, convé que tinguis sempre un mètode alternatiu d'administració i recuperació (RDP, mode segur, GPO, etc.).

Personalitzar l'Explorador de fitxers de Windows 11 des del Registre

Més enllà de les extensions COM, molts usuaris volen simplement treure opcions molestes del menú contextual o recuperar el comportament clàssic. A Windows 11, el redisseny del menú de clic dret i la integració de funcions com Copilot ha generat força crítiques, sobretot entre usuaris avançats.

El primer que has de tenir en compte és que tocar el Registre no és una broma. Un canvi mal fet pot desestabilitzar el sistema, així que abans de res crea un punt de restauració o una còpia de seguretat del Registre. I, per descomptat, assegura't de copiar les rutes exactament com estan indicades.

Per obrir l'Editor del Registre només cal escriure “regedit” al menú Inici i llançar el Editor de Registre. Des d'aquí podràs navegar per cada branca que citarem i crearem claus, valors de cadena o DWORD segons convingui.

Treure “Preguntar a Copilot” i altres entrades del menú contextual

Si tens instal·lada l'aplicació o integració de Copilot a Windows 11, en fer clic dret sobre un fitxer segurament veuràs l'opció “Preguntar a Copilot”. Aquesta entrada ocupa espai al menú i, si no utilitzes la funció, només destorba.

Per desactivar-la des del Registre navega fins HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions. Dins d'aquesta branca crea una nova clau anomenada Bloquejat. Un cop dins, afegeix un nou valor de cadena el nom del qual serà {CB3B0003-8088-4EDE-8769-8B354AB2FF8C} i deixa el contingut en blanc.

El mateix truc serveix per netejar altres opcions com “Editar amb el Bloc de notes”, Paint o Clipchamp. Sempre treballant sota la branca HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions i dins de la clau Bloquejat, pots crear diferents valors de cadena:

  • {CA6CC9F1-867A-481E-951E-A28C5E4F01EA} per amagar “Editar amb el Bloc de notes”.
  • {8BCF599D-B158-450F-B4C2-430932F2AF2F} per eliminar l'opció de Clipchamp.
  • {2430F218-B743-4FD6-97BF-5C76541B4AE9} per treure la integració de Pintar.

Un cop creats aquests valors, reinicieu l'Explorador o l'equip perquè Windows recargueu la configuració. Per revertir-ne qualsevol, només cal esborrar el valor corresponent o la clau completa Bloquejat si vols recuperar totes les entrades.

Recuperar el menú contextual clàssic de Windows 10

Un dels canvis més comentats de Windows 11 és el nou menú contextual simplificat. No és que sigui “dolent” en si, però molts usuaris veterans troben a faltar el menú complet de Windows 10, amb totes les opcions a la vista sense haver de prémer “Mostrar més opcions”.

Per tornar a l'estil clàssic pots fer servir una altra petita modificació al Registre. Dirigeix-te a HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID (compte, no ho confonguis amb la branca .cls) i crea una nova clau amb el nom {86ca1aa0-34aa-4e8b-a509-50c905bae2a2}.

Dins d'aquesta clau acabada de crear afegeix una altra trucada InprocServer32. Al panell dret, fes doble clic sobre el valor (Predeterminat) i assegura't que el camp de dades està completament buit. Accepteu els canvis i tanqueu l'editor.

Després de reiniciar el PC, en fer clic dret sobre fitxers o carpetes veuràs el menú contextual tal com apareixia a Windows 10, amb totes les opcions tradicionals a l'instant. Si decidiu tornar al comportament original del Windows 11, només caldrà eliminar aquesta clau CLSID (i el vostre subclau InprocServer32).

Millorar el rendiment de l'Explorador ajustant la vista de carpetes

L'Explorador de fitxers es pot tornar força lent si Windows intenta aplicar plantilles de carpeta específiques a cada ruta (per exemple, “Imatges”, “Vídeos”, “Documents”, etc.) i ha d'analitzar el contingut per decidir quina vista utilitzar. En equips amb molts fitxers o discos mecànics es nota especialment.

Un truc per agilitzar la navegació és dir-li al sistema que tracti totes les carpetes com a genèriques, de manera que l'anàlisi sigui més directa. Això s'aconsegueix a la clau HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell.

Dins aquesta clau crea un valor de cadena anomenat FolderType i assigna com a contingut Sense especificar. Desa els canvis i reinicia l'equip o tanca sessió i torna a entrar-hi.

Quan tornis a obrir l'Explorador notaràs que canviar de carpeta és més fluid, sobretot si sols moure't per rutes amb milers d'arxius o amb barreges de tipus molt variades. No és màgia, però ajuda a retallar segons aquí i allà. Aquest ajustament és especialment útil si Explorer va lent.

Integració de l'Explorador amb aplicacions empaquetades a MSIX

Fins ara hem parlat sobretot d'extensions registrades directament al Registre, que és lenfocament clàssic usat per instal·ladors MSI o ClickOnce. Aquestes tecnologies creen claus en diferents branques del Registre per registrar menús contextuals, associacions darxius i altres.

Amb aplicacions empaquetades a MSIX la pel·lícula canvia. El Registre es virtualitza per a l'app i ja no en pots dependre per registrar extensions de l'Explorador. Al seu lloc, has d'usar les extensions de paquet definides al manifest del paquet (Package.appxmanifest), on declares associacions de tipus de fitxer, verbs de menú contextual i servidors COM.

La forma més senzilla d'integració amb l'Explorador al MSIX és l'extensió windows.fileTypeAssociation. Declares quins tipus de fitxer suportes (per exemple, .foo), quins paràmetres rep el teu executable quan l'usuari obre un d'aquests fitxers i quins verbs addicionals apareixeran al menú contextual (per exemple, “Canviar mida del fitxer”).

L'element FileTypeAssociation defineix el nom lògic de l'associació i quins tipus suporta. En el vostre atribut Paràmetres sol anar almenys %1, que representa la ruta del fitxer seleccionat. Dins, l'element SupportedFileTypes enumera les extensions concretes (.foo, .bar, etc.), i SupportedVerbs conté els verbs que s'afegiran al menú contextual amb els paràmetres propis.

Hi ha dues importants limitacions d'aquest model: només pots mostrar verbs per a tipus de fitxer que la teva app ja tingui associats i només s'ensenyaran si la teva aplicació és la predeterminada per a aquest tipus. A més, el verb només pot llançar l'executable principal de l'app (encara que amb paràmetres diferents), no pas un altre EXE arbitrari.

Extensions de Shell COM avançades en paquets MSIX

Si necessites anar més enllà (controlar carpetes genèriques, llançar altres tasques o no obrir l'app principal cada cop), lopció és crear una extensió de Shell COM clàssica (DLL) i registrar-la dins del manifest MSIX, en lloc dutilitzar el Registre del sistema.

Una extensió de Shell COM és, bàsicament, una DLL que exposa una o diverses classes COM amb un CLSID únic. Windows carrega aquesta DLL quan l'Explorador necessita mostrar el menú contextual, icones, miniatures, etc., i truca a mètodes com GetTitle, GetIcon, GetTooltip o invocar (en el cas d'ordres del menú).

La implementació típica es fa a C++ per rendiment i consum de memòria. Un exemple clàssic és un projecte similar a “ExplorerCommandVerb”, on la classe CExplorerCommandVerb implementa l'ordre de menú. El mètode invocar és el que s'executa quan l'usuari prem la teva entrada al menú contextual, i des d'aquí pots fer pràcticament allò que vulguis: mostrar quadres de diàleg, llançar altres processos, processar diversos elements, etc.

Per registrar el servidor COM en un paquet MSIX utilitzeu l'espai de noms com al manifest. Al node com:Extension Category=»windows.comServer» declares el servidor COM, el tipus de servidor (per exemple, SurrogateServer) i dins un element com:Class on indiques el Id (el teu CLSID) i el Camí (la DLL que conté la implementació).

La integració amb l'explorador de fitxers es fa després mitjançant l'extensió windows.fileExplorerContextMenus, declarada dins d'un node desktop4:Extension. S'hi defineixen un o diversos desktop5:ItemType (Per exemple, directori, * o una extensió concreta) i, dins, elements desktop5:Verb que referencien el teu CLSID.

El fitxer DLL ha d'anar empaquetat dins del MSIX i copiar-lo juntament amb l'app. Si utilitzeu un Projecte d'empaquetatge d'Aplicacions de Windows, el més còmode és afegir la DLL al projecte i marcar-la perquè es copiï sempre al directori de sortida, o bé automatitzar la còpia amb un esdeveniment posterior a la compilació al projecte C++.

Després d'instal·lar el paquet MSIX, l'Explorador no carregarà la nova extensió fins que es reiniciï. Podeu reiniciar l'equip sencer o matar el procés explorer.exe des de l'Administrador de tasques i tornar-lo a iniciar. A partir d'aquest moment, la nova entrada de menú contextual apareixerà on l'heu declarada.

En conjunt, l'ecosistema d'extensions de Shell, ajustaments de Registre i manifestos MSIX permet portar l'Explorador de fitxers a un altre nivell, ja sigui per netejar menús molestos, accelerar la navegació, integrar les vostres pròpies aplicacions o fins i tot convertir estructures de dades complexes en “carpetes” navegables per a l'usuari. Amb una mica de cura en tocar el Registre i una bona planificació de les extensions COM, pots tenir un Explorador perfectament adaptat a les teves necessitats sense renunciar a l'estabilitat del sistema.

Logotip de Windows 10
Article relacionat:
Els millors exploradors d'arxius per a Windows 10