2010-02-19 3 views
4

Я ищу способ скрыть определенные значки с рабочего стола. У меня обычно есть много значков на моем рабочем столе (что делает поиск файла реальным хлопотом), поэтому я хотел бы написать небольшой инструмент, который «фильтрует» их по мере ввода. Я не хочу «перемещать» или удалять их, просто спрятать (или затемнить) их. Я знаю, как переключать отображение скрытых статусов всех значков одновременно, но не на основе значка. Есть идеи?Можно ли скрыть определенные значки рабочего стола с помощью C#?

+1

Если вы сделаете это приложение, отправить его мне, пожалуйста :) – anthares

+0

Sure - не проблема, я бы с открытым исходным кодом оно в любом случае :-) – crono

ответ

3

Я попытался каким-то образом перейти к управлению рабочим столом ListView (используя Win32 API). Затем я либо нарисую полупрозрачные прямоугольники над предметами, которые я хочу скрыть (вы можете запросить прямоугольники элементов с помощью макроса/сообщения ListItem_GetItemRect), временно удалять элементы из элемента управления списком, устанавливать статус элементов на CUT (который исчезает), или я попытаюсь манипулировать списком изображений в виде списка, чтобы добавить прозрачное изображение и установить для него изображения этого элемента.

Но я не знаю, будет ли этот подход работать ... И я не уверен, попытаюсь ли я попробовать это на C# (я бы предпочел использовать C++).

+0

мне очень нравится идея прямоугольник! Я тоже попробую. Я думаю, что останусь в .Net, мой опыт Win32 C++ почти равен нулю. – crono

3

@crono, я думаю, что ваш лучший вариант - добавить ссылку на библиотеку COM «Microsoft Shell Control And Automation» и использовать объект Shell32.Shell. а затем перечислить ярлыки и установить атрибуты файла (FileAttributes.Hidden) ярлыков.

Проверьте эти ссылки, чтобы узнать больше.

увидеть этот простой пример, не является полным, это просто проект.

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

Это хорошая идея, но я думаю, что это сработает, если я установлю «отображение скрытых файлов» на «ложь», что у меня есть «на» большую часть времени. Может быть, я могу изменить его «на лету» ... Я посмотрю. Благодаря :) – crono

Смежные вопросы