Можно ли скрыть определенные значки рабочего стола с C #? - PullRequest
4 голосов
/ 19 февраля 2010

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

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

@ 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();
            }
        }
    }
3 голосов
/ 19 февраля 2010

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

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

...