我正在寻找一种隐藏桌面特定图标的方法。我通常在我的桌面上有很多图标(这使得查找文件变得非常麻烦),所以我想写一个小工具,在我输入时“过滤”它们。我不想“移动”或删除它们,只是隐藏(或变暗)它们。我知道如何切换显示所有图标的隐藏状态,但不是基于每个图标。有什么想法吗?
答案 0 :(得分:3)
我尝试以某种方式导航到桌面的ListView
控件(使用Win32 API)。然后我要在我要隐藏的项目上画一些半透明的矩形(你可以使用ListItem_GetItemRect
宏/消息查询项目的矩形),从列表控件中暂时删除项目,设置状态CUT
的项目(淡出了)或者我会尝试操纵列表视图的图像列表来添加透明图像并将项目的图像设置为此。
但是我不知道这种方法是否有用......而且我不确定我是否会在C#中尝试这种方法(我宁愿使用C ++)。
答案 1 :(得分: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();
}
}
}