2010-02-19 13 views
4

Je cherche un moyen de cacher des icônes spécifiques du bureau. J'ai généralement beaucoup d'icônes sur mon bureau (ce qui rend la recherche d'un fichier très difficile), donc je voudrais écrire un petit outil qui les "filtre" au fur et à mesure que je tape. Je ne veux pas les "déplacer" ou les supprimer, il suffit de les cacher (ou de les assombrir). Je sais comment basculer afficher un état de la peau de toutes les icônes à la fois, mais pas sur une base par icône. Des idées?Est-il possible de masquer des icônes de bureau spécifiques avec C#?

+1

Si vous faites cette application, envoyez-moi à :) s'il vous plaît – anthares

+0

sûr - pas de problème, je l'open source :-) toute façon – crono

Répondre

3

Je voudrais essayer de naviguer en quelque sorte au contrôle ListView du bureau (en utilisant l'API Win32). Ensuite, je dessine des rectangles semi-transparents sur les éléments que je veux masquer (vous pouvez interroger les rectangles d'éléments en utilisant la macro/message ListItem_GetItemRect), supprimer temporairement des éléments du contrôle de liste, définir le statut des éléments sur CUT (qui disparaît) ou j'essayerais de manipuler la liste d'images de la liste pour ajouter une image transparente et définir les images de l'élément.

Mais je n'ai aucune idée si cette approche fonctionnerait ... Et je ne suis pas sûr d'essayer ceci en C# (je préfère utiliser C++).

+0

Je aime vraiment l'idée du rectangle! Je vais essayer aussi. Je pense que je vais rester dans. Net, mon expérience Win32 C++ est presque nulle. – crono

3

@crono, je pense que votre meilleure option est d'ajouter une référence à la bibliothèque COM "Microsoft Shell Control And Automation" et d'utiliser l'objet Shell32.Shell. puis énumérez les raccourcis et définissez le fichier atributes (FileAttributes.Hidden) des raccourcis.

Consultez ces liens pour plus d'informations.

voir cet exemple simple, n'est pas complète, est juste un projet.

using System; 
    using System.Collections.Generic; 
    using System.Text; 
    using System.IO; 
    using Shell32; //"Microsoft Shell Control And Automation" 

    namespace ConsoleApplication1 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       Shell32.Shell oShell; 
       Shell32.Folder oFldr; 
       oShell = new Shell32.Shell(); 
       oFldr = oShell.NameSpace(Shell32.ShellSpecialFolderConstants.ssfDESKTOP);//point to the desktop 

       foreach (Shell32.FolderItem oFItm in oFldr.Items()) //get the shotrcuts 
       { 

        if (oFItm.IsLink) 
        { 
         Console.WriteLine("{0} {1} ", oFItm.Name, oFItm.Path); 

         bool isArchive = ((File.GetAttributes(oFItm.Path) & FileAttributes.Archive) == FileAttributes.Archive); 
         //bool isHidden = ((File.GetAttributes(oFItm.Path) & FileAttributes.Hidden) == FileAttributes.Hidden); 

         if (isArchive) //Warning, here you must define the condition for hide the shortcut. in this case only check if has set the Archive atribute. 
         { 

          //Now you can set FileAttributes.Hidden atribute 
          //File.SetAttributes(oFItm.Path, File.GetAttributes(oFItm.Path) | FileAttributes.Hidden); 
         } 

        } 
        else 
        { 
         Console.WriteLine("{0} {1} ", oFItm.Name, oFItm.Path); 
        } 

       } 

       Console.ReadKey(); 
      } 
     } 
    } 
+0

C'est une bonne idée, mais je pense que cela ne fonctionnerait que si je définissais "afficher les fichiers cachés" sur "faux" - ce que j'ai "allumé" la plupart du temps. Peut-être que je pourrais le changer "à la volée" ... Je vais avoir un coup d'oeil. Merci :) – crono